home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / UTILITY / INTER29B.ARJ / INTERRUP.D next >
Text File  |  1992-02-09  |  241KB  |  6,555 lines

  1. Interrupt List, part 4 of 6
  2. This compilation is Copyright (c) 1989,1990,1991,1992 Ralf Brown
  3. ----------2180-------------------------------
  4. INT 21 - European MSDOS 4.0 - EXECUTE PROGRAM IN BACKGROUND
  5.     AH = 80h
  6.     DS:DX -> ASCIZ full program name
  7.     ES:BX -> parameter block (as for AX=4B00h)
  8. Return: CF clear if successful
  9.         AX = CSID
  10.     CF set on error
  11.         AX = error code (see AH=59h)
  12. Note:    this function is called by the DETACH command
  13. ----------218080-----------------------------
  14. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  15.     AX = 8080h
  16. Return: ???
  17. SeeAlso: AX=7070h/BX=7070h
  18. ----------2181-------------------------------
  19. INT 21 - European MSDOS 4.0 - ???
  20.     AH = 81h
  21.     ???
  22. Return: ???
  23. ----------2182-------------------------------
  24. INT 21 - European MSDOS 4.0 - ???
  25.     AH = 82h
  26.     ???
  27. Return: ???
  28. ----------2183-------------------------------
  29. INT 21 - European MSDOS 4.0 - ???
  30.     AH = 83h
  31.     ???
  32. Return: ???
  33. ----------2183-------------------------------
  34. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  35.     AH = 83h
  36. Return: DX = 1990h if resident
  37. SeeAlso: AH=76h,AH=84h"VIRUS"
  38. ----------2184-------------------------------
  39. INT 21 - European MSDOS 4.0 - ???
  40.     AH = 84h
  41.     ???
  42. Return: ???
  43. ----------2184-------------------------------
  44. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  45.     AH = 84h
  46. Return: DX = 1990h if resident
  47.         BH = version number (major in high nybble, minor in low)
  48. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  49. ----------2185-------------------------------
  50. INT 21 - European MSDOS 4.0 - ???
  51.     AH = 85h
  52.     ???
  53. Return: ???
  54. ----------2186-------------------------------
  55. INT 21 - European MSDOS 4.0 - ???
  56.     AH = 86h
  57.     ???
  58. Return: ???
  59. ----------218700-----------------------------
  60. INT 21 - European DOS 4.0 - GET PID???
  61.     AX = 8700h
  62. Return: AX = PID if AL nonzero
  63.     BX = ???
  64.     CX = ???
  65. Notes:    called by MS C v5.1 getpid() function
  66.     this function apparently must return AX=0001h for INT 21/AH=80h to
  67.       succeed
  68. SeeAlso: AH=62h
  69. ----------2188-------------------------------
  70. INT 21 - European MSDOS 4.0 - ???
  71.     AH = 88h
  72.     ???
  73. Return: ???
  74. ----------2189-------------------------------
  75. INT 21 - European MSDOS 4.0 - ???
  76.     AH = 89h
  77.     ???
  78. Return: ???
  79. Note:    reportedly called by Microsoft C 4.0 startup code
  80. ----------2189-------------------------------
  81. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  82.     AH = 89h
  83. Return: AX = 0123h if resident
  84. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  85. ----------218A-------------------------------
  86. INT 21 - European MSDOS 4.0 - ???
  87.     AH = 8Ah
  88.     ???
  89. Return: ???
  90. ----------218B-------------------------------
  91. INT 21 - European MSDOS 4.0 - ???
  92.     AH = 8Bh
  93.     ???
  94. Return: ???
  95. ----------218C-------------------------------
  96. INT 21 - European MSDOS 4.0 - ???
  97.     AH = 8Ch
  98.     ???
  99. Return: ???
  100. ----------218D-------------------------------
  101. INT 21 - European MSDOS 4.0 - ???
  102.     AH = 8Dh
  103.     ???
  104. Return: ???
  105. ----------218E-------------------------------
  106. INT 21 - European MSDOS 4.0 - ???
  107.     AH = 8Eh
  108.     ???
  109. Return: ???
  110. ----------218F-------------------------------
  111. INT 21 - European MSDOS 4.0 - ???
  112.     AH = 8Fh
  113.     ???
  114. Return: ???
  115. ----------2190-------------------------------
  116. INT 21 - European MSDOS 4.0 - ???
  117.     AH = 90h
  118.     ???
  119. Return: ???
  120. ----------2190-------------------------------
  121. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  122.     AH = 90h
  123. Return: AH = 01h if resident
  124. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  125. ----------2191-------------------------------
  126. INT 21 - European MSDOS 4.0 - ???
  127.     AH = 91h
  128.     ???
  129. Return: ???
  130. ----------2192-------------------------------
  131. INT 21 - European MSDOS 4.0 - ???
  132.     AH = 92h
  133.     ???
  134. Return: ???
  135. ----------2193-------------------------------
  136. INT 21 - European MSDOS 4.0 - ???
  137.     AH = 93h
  138.     ???
  139. Return: ???
  140. ----------2194-------------------------------
  141. INT 21 - European MSDOS 4.0 - ???
  142.     AH = 94h
  143.     ???
  144. Return: ???
  145. ----------2195-------------------------------
  146. INT 21 - European MSDOS 4.0 - ???
  147.     AH = 95h
  148.     ???
  149. Return: ???
  150. ----------2196-------------------------------
  151. INT 21 - European MSDOS 4.0 - ???
  152.     AH = 96h
  153.     ???
  154. Return: ???
  155. ----------2197-------------------------------
  156. INT 21 - European MSDOS 4.0 - ???
  157.     AH = 97h
  158.     ???
  159. Return: ???
  160. ----------219753-----------------------------
  161. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  162.     AX = 9753h
  163. Return: never (executes original program) if virus resident
  164. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
  165. ----------2198-------------------------------
  166. INT 21 - European MSDOS 4.0 - ???
  167.     AH = 98h
  168.     ???
  169. Return: ???
  170. ----------2199-------------------------------
  171. INT 21 - European MSDOS 4.0 - ???
  172.     AH = 99h
  173.     ???
  174. Return: ???
  175. ----------219A-------------------------------
  176. INT 21 - European MSDOS 4.0 - ???
  177.     AH = 9Ah
  178.     ???
  179. Return: ???
  180. ----------21A0-------------------------------
  181. INT 21 - Attachmate Extra - GET 3270 DISPLAY STATE
  182.     AH = A0h
  183. Return: AL = display status
  184.         bit     7  : 0=windowed, 1=enlarged
  185.         bits 6-3: current screen profile number 0-9
  186.         bits 2-0: active window number
  187.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  188.     BX = host window status
  189.         bit 15:  reserved
  190.         bit 14:  0=host E window installed, 1=not
  191.         bit 13:  0=host E terminal on, 1=off
  192.         bit 12:  0=host E window displayed, 1=not
  193.         bit 11:  reserved
  194.         bit 10:  0=host D window installed, 1=not
  195.         bit     9:  0=host D terminal on, 1=off
  196.         bit     8:  0=host D window displayed, 1=not
  197.         bit     7:  reserved
  198.         bit     6:  0=host C window installed, 1=not
  199.         bit     5:  0=host C terminal on, 1=off
  200.         bit     4:  0=host C window displayed, 1=not
  201.         bit     3:  reserved
  202.         bit     2:  0=host B window installed, 1=not
  203.         bit     1:  0=host B terminal on, 1=off
  204.         bit     0:  0=host B window displayed, 1=not
  205. Note:    Attachmate Extra is a 3270 emulator by Attachmate Corporation
  206. SeeAlso: AH=A1h
  207. ----------21A1-------------------------------
  208. INT 21 - Attachmate Extra - SET 3270 DISPLAY STATE
  209.     AH = A1h
  210.     AL = set status byte
  211.         bit     7  : 0=windowed, 1=enlarged
  212.         bits 6-3: current screen profile number 0-9
  213.         bits 2-0: active window number
  214.             0=PC, 1-4=host B-E, 5-6=notepad F-G
  215. SeeAlso: AH=A0h,AH=A2h
  216. ----------21A1D5-----------------------------
  217. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  218.     AX = A1D5h
  219. Return: AX = 900Dh if resident
  220. SeeAlso: AX=9753h,AX=A55Ah
  221. ----------21A2-------------------------------
  222. INT 21 - Attachmate Extra - SET HOST WINDOW STATE
  223.     AH = A2h
  224.     AL = set status byte
  225.         bit     7  : 0=power off, 1=power on
  226.         bit     6  : 0=not installed, 1=installed
  227.         bits 5-3: reserved
  228.         bits 2-0: window number 1-4=host B-E
  229. SeeAlso: AH=A1h
  230. ----------21A3-------------------------------
  231. INT 21 - Attachmate Extra - SEND KEYSTROKES TO HOST WINDOW
  232.     AH = A3h
  233.     AL = window number (1-4=host B-E)
  234.     CX = 0001h
  235.     DS:BX -> keystroke buffer
  236.     DL = zero if keystroke buffer contains host function code,
  237.          non-zero if keystroke buffer contains ASCII character
  238. Return: CX = zero if character sent, non-zero if not
  239.     BX incremented if CX=0
  240.  
  241. Values for host function code:
  242.     00h=reserved    10h=PF16    20h=Clear    30h=SysRq
  243.     01h=PF1        11h=PF17    21h=Print    31h=ErInp
  244.     02h=PF2        12h=PF18    22h=Left    32h=ErEof
  245.     03h=PF3        13h=PF19    23h=Right    33h=Ident
  246.     04h=PF4        14h=PF20    24h=Up        34h=Test
  247.     05h=PF5        15h=PF21    25h=Down    35h=Reset
  248.     06h=PF6        16h=PF22    26h=Home    36h=DevCncl
  249.     07h=PF7        17h=PF23    27h=Fast Left    37h=Dup
  250.     08h=PF8        18h=PF24    28h=Fast Right    38h=FldMark
  251.     09h=PF9        19h=Alt on    29h=Bksp    39h=Enter
  252.     0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  253.     0Bh=PF11    1Bh=Shift on    2Bh=Delete
  254.     0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  255.     0Dh=PF13    1Dh=PA1        2Dh=Tab
  256.     0Eh=PF14    1Eh=PA2        2Eh=Newline
  257.     0Fh=PF15    1Fh=PA3        2Fh=Attn
  258. ----------21A4-------------------------------
  259. INT 21 - Attachmate Extra - GET HOST WINDOW BUFFER ADDRESS
  260.     AH = A4h
  261.     AL = window number (1-4=host B-E)
  262. Return: DS:BX -> 3270 display buffer
  263. SeeAlso: AH=A5h,AH=B8h
  264. ----------21A5-------------------------------
  265. INT 21 - Attachmate Extra - GET HOST WINDOW CURSOR POSITION
  266.     AH = A5h
  267.     AL = window number (1-4=host B-E)
  268. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  269. Note:    if the host window is configured with the Extended Attribute (EAB)
  270.       feature, multiply the cursor position by 2 to obtain the byte offset
  271.       into the display buffer
  272. SeeAlso: AH=A4h
  273. ----------21A55A-----------------------------
  274. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  275.     AX = A55Ah
  276. Return: AX = 5AA5h if resident
  277. SeeAlso: AX=A1D5h,AX=AA00h
  278. ----------21AA00-----------------------------
  279. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  280.     AX = AA00h
  281. Return: AX = 00AAh if resident
  282. SeeAlso: AX=A55Ah,AX=AA03h
  283. ----------21AA03-----------------------------
  284. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  285.     AX = AA03h
  286. Return: AX = 03AAh if resident
  287. SeeAlso: AX=AA00h,AH=ABh
  288. ----------21AB-------------------------------
  289. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  290.     AH = ABh
  291. Return: AX = 5555h if resident
  292. SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
  293. ----------21AF-------------------------------
  294. INT 21 - Attachmate Extra - GET TRANSLATE TABLE ADDRESS
  295.     AH = AFh
  296. Return: DS:BX -> translate tables (see below)
  297.  
  298. Format of translate tables:
  299. Offset    Size    Description
  300.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  301. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  302. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  303. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  304. ----------21B5-------------------------------
  305. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  306.     AH = B5h
  307.     AL = subfunction
  308.         03h get task mode
  309.         Return: AH = 00h
  310.             AL = current task mode byte
  311.         04h get task mode pointer
  312.         Return: ES:BX -> task mode byte
  313. Notes:    the task mode byte specifies how task cleanup should be performed, but
  314.       is declared to be version-dependent
  315.     allows a program to disable the automatic cleanup for programs managing
  316.       task swapping, etc.
  317.  
  318. Values for task mode byte in version 3.01:
  319.  00h-03h reserved
  320.  04h     no task cleanup
  321. ----------21B6-------------------------------
  322. INT 21 - Novell NetWare SFT Level II - EXTENDED FILE ATTRIBUTES
  323.     AH = B6h
  324.     AL = subfunction
  325.         00h get extended file attributes
  326.         01h set extended file attributes
  327.     CL = attributes
  328.         bits 2-0: search mode (executables only)
  329.             000 none (use shell's default search)
  330.             001 search on all opens without path
  331.             010 do not search
  332.             011 search on read-only opens without path
  333.             100 reserved
  334.             101 search on all opens
  335.             110 reserved
  336.             111 search on all read-only opens
  337.         3: reserved
  338.         4: transaction tracking file
  339.         5: indexing file
  340.         6: read audit (to be implemented)
  341.         7: write audit (to be implemented)
  342.     DS:DX -> ASCIZ pathname
  343. Return: CF set on error
  344.         AL = error code
  345.         8Ch caller lacks privileges
  346.         FFh file not found
  347.     CL = current extended file attributes
  348. SeeAlso: AX=4300h
  349. ----------21B8-------------------------------
  350. INT 21 - Novell Advanced NetWare 2.0+ - PRINT JOBS
  351.     AH = B8h
  352.     AL = subfunction
  353.         00h get default print job flags
  354.         01h set default capture flags (see below)
  355.         02h get specific capture flags
  356.         03h set specific print job flags
  357.         04h get default local printer
  358.         05h set default local printer
  359.         06h set capture print queue
  360.         07h set capture print job
  361.         08h get banner user name
  362.         09h set banner user name
  363.     CX = buffer size
  364.     ES:BX -> buffer
  365. Return: none
  366.  
  367. Format of capture flags table:
  368. Offset    Size    Description
  369.  00h    BYTE    status (used internally, should be set to 00h)
  370.  01h    BYTE    print flags
  371.         bit 2: print capture file if interrupted by loss of connection
  372.             3: no automatic form feed after print job
  373.             6: printing control sequences interpreted by print service
  374.             7: print banner page before capture file
  375.  02h    BYTE    printer number on server
  376.  03h    BYTE    number of copies to print
  377.  04h    BYTE    form type required in printer (default 00h)
  378.  05h 13 BYTEs    text to be placed on banner page
  379.  12h    BYTE    reserved
  380.  13h    BYTE    default local printer (00h = LPT1)
  381.  14h    BYTE    flush capture file on LPT close if nonzero
  382.  15h    WORD    timeout in clock ticks for flushing capture file on inactivity
  383.         (high byte first)
  384.         0000h = never timeout
  385.  17h    WORD    maximum lines per page (high byte first)
  386.  19h    WORD    maximum characters per line (high byte first)
  387.  1Bh 13 BYTEs    name of form required in printer
  388.  28h    BYTE    LPT capture flag
  389.         00h inactive, FFh LPT device is being captured
  390.  29h    BYTE    file capture flag
  391.         00h if no file specified, FFh if capturing to file
  392.  2Ah    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  393.         running)
  394.  2Bh    WORD    offset of printer setup string (high byte first)
  395.  2Dh    WORD    offset of printer reset string (high byte first)
  396.  2Fh    BYTE    target connection ID
  397.  30h    BYTE    capture in progress if FFh
  398.  31h    BYTE    print job number assigned to capture if FFh
  399.  32h    WORD    bindery object ID of print queue if previous byte FFh
  400.  34h    WORD    print job number (high byte first)
  401. ----------21B8-------------------------------
  402. INT 21 - Attachmate Extra - DISABLE HOST BUFFER UPDATES
  403.     AH = B8h
  404.     AL = window number (1-4=host B-E)
  405.     DL = 01h
  406. Notes:    only valid in CUT mode
  407.     next AID keystroke (eg Enter) enables host buffer updates
  408. SeeAlso: AH=A4h
  409. ----------21BB-------------------------------
  410. INT 21 - Novell NetWare 4.0, Alloy NTNX - SET END OF JOB STATUS
  411.     AH = BBh
  412.     AL = new EOJ flag
  413.         00h disable EOJs
  414.         otherwise enable EOJs
  415. Return: AL = old EOJ flag
  416. SeeAlso: AH=D6h
  417. ----------21BBBB-----------------------------
  418. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  419.     AX = BBBBh
  420. Return: AX = 6969h
  421. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  422. ----------21BC-------------------------------
  423. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK PHYSICAL RECORD
  424.     AH = BCh
  425.     AL = flags
  426.         bit 0: lock as well as log record
  427.         1: non-exclusive lock
  428.     BX = file handle
  429.     CX:DX = offset
  430.     BP = timeout in timer ticks (1/18 sec)
  431.     SI:DI = length of region to lock
  432. Return: AL = error code
  433.         00h successful
  434.         96h no dynamic memory for file
  435.         FEh timed out
  436.         FFh failed
  437. SeeAlso: AH=BDh,AH=BFh
  438. ----------21BD-------------------------------
  439. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD
  440.     AH = BDh
  441.     BX = file handle
  442.     CX:DX = offset
  443. Return: AL = error code (see AH=BCh)
  444. Note:    unlocks record but does not remove it from log table
  445. SeeAlso: AH=BCh,AH=BEh"Novell",AH=C0h
  446. ----------21BE-------------------------------
  447. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD
  448.     AH = BEh
  449.     BX = file handle
  450.     CX:DX = offset
  451. Return: AL = error code (see AH=BCh)
  452. Note:    unlocks record and removes it from log table
  453. SeeAlso: AH=BCh,AH=BDh,AH=C1h
  454. ----------21BE-------------------------------
  455. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  456.     AH = BEh
  457. Return: AX = 1234h if resident
  458. SeeAlso: AX=BBBBh,AX=BE00h
  459. ----------21BE00-----------------------------
  460. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  461.     AX = BE00h
  462.     CF set
  463. Return: CF clear if resident
  464. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  465. ----------21BF-------------------------------
  466. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG/LOCK RECORD (FCB)
  467.     AH = BFh
  468.     AL = flags
  469.         bit 0: lock as well as log record
  470.         1: non-exclusive lock
  471.     DS:DX -> opened FCB (see AH=0Fh)
  472.     BX:CX = offset
  473.     BP = lock timeout in timer ticks (1/18 sec)
  474.     SI:DI = length
  475. Return: AL = error code (see AH=BCh)
  476. SeeAlso: AH=BCh,AH=C0h"Novell",AH=C2h"Novell"
  477. ----------21C0-------------------------------
  478. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE RECORD (FCB)
  479.     AH = C0h
  480.     DS:DX -> FCB (see AH=0Fh)
  481.     BX:CX = offset
  482. Return: AL = error code (see AH=BCh)
  483. Note:    unlocks record but does not remove it from log table
  484. SeeAlso: AH=BDh,AH=BFh,AH=C1h"Novell",AH=C3h
  485. ----------21C0-------------------------------
  486. INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
  487.     AH = C0h
  488. Return: AX = 0300h if "Slow"/"Zerotime" resident
  489.     AX = 1234h if "Solano" resident
  490. SeeAlso: AX=BE00h,AH=C1h"VIRUS",AX=C301h"VIRUS"
  491. ----------21C1-------------------------------
  492. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR RECORD (FCB)
  493.     AH = C1h
  494.     DS:DX -> opened FCB (see AH=0Fh)
  495.     BX:CX = offset
  496. Return: AL = error code (see AH=BCh)
  497. Note:    unlocks record and removes it from log table
  498. SeeAlso: AH=BEh,AH=C0h"Novell",AH=C4h
  499. ----------21C1-------------------------------
  500. INT 21 - VIRUS - "Solano" - ???
  501.     AH = C1h
  502.     ???
  503. Return: ???
  504. SeeAlso: AH=C0h"VIRUS"
  505. ----------21C2-------------------------------
  506. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOCK PHYSICAL RECORD SET
  507.     AH = C2h
  508.     AL = flags
  509.         bit 1: non-exclusive lock
  510.     BP = lock timeout in timer ticks (1/18 sec)
  511. Return: AL = error code
  512.         00h successful
  513.         FEh timed out
  514.         FFh failed
  515. SeeAlso: AH=BFh,AH=C3h
  516. ----------21C2-------------------------------
  517. INT 21 - VIRUS - "Scott's Valley" - ???
  518.     AH = C2h
  519.     ???
  520. Return: ???
  521. SeeAlso: AH=C0h"VIRUS"
  522. ----------21C3-------------------------------
  523. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE PHYSICAL RECORD SET
  524.     AH = C3h
  525. Return: AL = error code
  526. Note:    unlocks but does not remove from log table
  527. SeeAlso: AH=C0h,AH=C2h"Novell",AH=C4h
  528. ----------21C301DXF1F1-----------------------
  529. INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
  530.     AX = C301h
  531.     DX = F1F1h
  532. Return: DX = 0E0Eh if resident
  533. SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
  534. ----------21C4-------------------------------
  535. INT 21 - Novell NetWare 4.6, Alloy NTNX - CLEAR PHYSICAL RECORD SET
  536.     AH = C4h
  537. Return: AL = error code
  538. Note:    unlocks and removes from log table
  539. SeeAlso: AH=C1h
  540. ----------21C5-------------------------------
  541. INT 21 - Novell NetWare 4.6, Alloy NTNX - SEMAPHORES
  542.     AH = C5h
  543.     AL = subfunction
  544.         00h open semaphore
  545.         DS:DX -> semaphore name (counted string)
  546.         CL = initial value
  547.         Return: CX:DX = semaphore handle
  548.             BL = open count
  549.         01h examine semaphore
  550.         Return: CX = semaphore value (sign extended)
  551.             DL = open count
  552.         02h wait on semaphore
  553.         BP = timeout in timer ticks (1/18 sec) (0000h = no wait)
  554.         03h signal semaphore
  555.         04h close semaphore
  556.     CX:DX = semaphore handle (except function 00h)
  557. Return: AL = error code
  558.         00h successful
  559.         01h semaphore value overflow
  560.         96h out of string space on server
  561.         FEh invalid string length (AL=00h) or timeout
  562.         FFh invalid initial value (AL=00h) or invalid handle
  563. ----------21C500-----------------------------
  564. INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
  565.     AX = C500h
  566. Return: AX = 6731h if resident
  567. SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
  568. ----------21C6-------------------------------
  569. INT 21 - Novell NetWare 4.6, Alloy NTNX - GET OR SET LOCK MODE
  570.     AH = C6h
  571.     AL = subfunction
  572.         00h set old "compatibility" mode
  573.         01h set new extended locks mode 
  574.         02h get lock mode
  575. Return: AL = current lock mode
  576. ----------21C6-------------------------------
  577. INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
  578.     AH = C6h
  579. Return: AL = 55h if resident
  580. SeeAlso: AX=C500h"VIRUS",AX=C603h
  581. ----------21C603-----------------------------
  582. INT 21 - VIRUS - "Yankee" or "MLTI" - INSTALLATION CHECK
  583.     AX = C603h
  584.     CF set
  585. Return: CF clear if resident
  586. SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
  587. ----------21C7-------------------------------
  588. INT 21 - Novell NetWare 4.0 - TRANSACTION TRACKING SYSTEM
  589.     AH = C7h
  590.     AL = subfunction
  591.         00h begin transaction (NetWare SFT level II)
  592.         Return: AL = error code
  593.         01h end transaction (NetWare SFT level II)
  594.         Return: AL = error code
  595.             CX:DX = transaction reference number
  596.         02h TTS available (NetWare SFT level II)
  597.         Return: AL = completion code
  598.                 00h TTS not available
  599.                 01h TTS available
  600.                 FDh TTS available but disabled
  601.         03h abort transaction (NetWare SFT level II)
  602.         Return: AL = error code
  603.         04h transaction status
  604.         05h get application thresholds
  605.         06h set application thresholds
  606.         07h get workstation thresholds
  607.         08h set workstation thresholds
  608. Return: ???
  609. ----------21C700-----------------------------
  610. INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
  611.     AX = C700h
  612. Return: AL = 07h if resident
  613. SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
  614. ----------21C8-------------------------------
  615. INT 21 - Novell NetWare 4.0 - BEGIN LOGICAL FILE LOCKING
  616.     AH = C8h
  617.     if function C6h lock mode 00h:
  618.         DL = mode
  619.         00h no wait
  620.         01h wait
  621.     if function C6h lock mode 01h:
  622.         BP = timeout in timer ticks (1/18 sec)
  623. Return: AL = error code
  624. SeeAlso: AH=C9h
  625. ----------21C9-------------------------------
  626. INT 21 - Novell NetWare 4.0 - END LOGICAL FILE LOCKING
  627.     AH = C9h
  628. Return: AL = error code
  629. SeeAlso: AH=C8h
  630. ----------21CA-------------------------------
  631. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
  632.     AH = CAh
  633.     DS:DX -> FCB (see AH=0Fh)
  634.     if function C6h lock mode 01h:
  635.         AL = log and lock flag
  636.         00h log file only
  637.         01h lock as well as log file
  638.         BP = lock timeout in timer ticks (1/18 sec)
  639. Return: AL = error code
  640.         00h successful
  641.         96h no dynamic memory for file
  642.         FEh timeout
  643.         FFh failed
  644. SeeAlso: AH=CBh
  645. ----------21CA15-----------------------------
  646. INT 21 - VIRUS - "Piter" - ???
  647.     AX = CA15h
  648.     ???
  649. Return: ???
  650. SeeAlso: AH=CCh"VIRUS"
  651. ----------21CB-------------------------------
  652. INT 21 - Novell NetWare 4.0, Alloy NTNX - LOCK FILE SET
  653.     AH = CBh
  654.     if function C6h lock mode 00h:
  655.         DL = mode
  656.         00h no wait
  657.         01h wait
  658.     if function C6h lock mode 01h:
  659.         BP = lock timeout in timer ticks (1/18 sec)
  660. Return: AL = error code
  661.         00h successful
  662.         FEh timed out
  663.         FFh failed
  664. Note:    attempts to lock all logged personal files
  665. SeeAlso: AH=CAh
  666. ----------21CB-------------------------------
  667. INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
  668.     AH = CBh
  669. Return: AL = 07h if resident
  670. SeeAlso: AX=C700h"VIRUS",AX=CB02h
  671. ----------21CB02-----------------------------
  672. INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
  673.     AX = CB02h
  674. Return: AX = 02CBh if resident
  675. SeeAlso: AX=CBh"VIRUS",AH=CCh"VIRUS"
  676. ----------21CC-------------------------------
  677. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE (FCB)
  678.     AH = CCh
  679.     DS:DX -> FCB (see AH=0Fh)
  680. Return: none
  681. Note:    unlocks file, but does not remove it from the log table or close it
  682. SeeAlso: AH=CAh,AH=CDh
  683. ----------21CC-------------------------------
  684. INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
  685.     AH = CCh
  686. Return: AX = 0700h if resident
  687. SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
  688. ----------21CD-------------------------------
  689. INT 21 - Novell NetWare 4.0, Alloy NTNX - RELEASE FILE SET
  690.     AH = CDh
  691. Return: none
  692. Note:    unlocks all personal files, but does not remove them from log table
  693. SeeAlso: AH=CAh,AH=CCh
  694. ----------21CD-------------------------------
  695. INT 21 - VIRUS - "Westwood" - ???
  696.     AH = CDh
  697.     ???
  698. Return: ???
  699. SeeAlso: AH=CCh"VIRUS"
  700. ----------21CE-------------------------------
  701. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE (FCB)
  702.     AH = CEh
  703.     DS:DX -> FCB (see AH=0Fh)
  704. Return: AL = error code
  705. Note:    unlocks file and removes it from log table, then closes all opened and
  706.       logged occurrences
  707. SeeAlso: AH=CAh,AH=CFh,AH=EDh"Novell"
  708. ----------21CF-------------------------------
  709. INT 21 - LANstep - ???
  710.     AH = CFh
  711.     ???
  712. Return: ???
  713. Note:    LANstep is a redesign of the Waterloo Microsystems PORT network
  714. ----------21CF-------------------------------
  715. INT 21 - Novell NetWare 4.0, Alloy NTNX - CLEAR FILE SET
  716.     AH = CFh
  717. Return: AL = 00h
  718. Note:    clears all entries in personal file log table
  719. SeeAlso: AH=CAh,AH=CEh
  720. ----------21D0-------------------------------
  721. INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD
  722.     AH = D0h
  723.     DS:DX -> record string (counted string, max 100 data bytes)
  724.     if function C6h lock mode 01h: (Novell, NTNX only)
  725.         AL = flags
  726.         bit 0: lock as well as log the record
  727.         bit 1: non-exclusive lock
  728.         BP = lock timeout in timer ticks (1/18 sec)
  729. Return: AL = error code
  730.         00h successful
  731.         96h no dynamic memory for file
  732.         FEh timed out
  733.         FFh unsuccessful
  734. SeeAlso: AH=D1h,AH=D2h
  735. ----------21D000-----------------------------
  736. INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
  737.     AX = D000h
  738. Return: BX = 1234h if resident
  739. SeeAlso: AH=CCh"VIRUS",AH=D5h"VIRUS",AX=D5AAh
  740. ----------21D1-------------------------------
  741. INT 21 - Novell NetWare 4.6, Banyan VINES, Alloy NTNX - LOCK LOGICAL RECORD SET
  742.     AH = D1h
  743.     if function C6h lock mode 00h:
  744.         DL = mode
  745.         00h no wait
  746.         01h wait
  747.     if function C6h lock mode 01h: (Novell only)
  748.        BP = lock timeout in timer ticks (1/18 sec)
  749.         0000h no wait
  750. Return: AL = error code (see AH=D0h)
  751. SeeAlso: AH=D0h,AH=D3h
  752. ----------21D2-------------------------------
  753. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - UNLOCK LOGICAL RECORD
  754.     AH = D2h
  755.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  756. Return: AL = error code (see AH=D0h)
  757. Note:    unlocks record but does not remove it from log table
  758. SeeAlso: AH=D0h,AH=D3h
  759. ----------21D3-------------------------------
  760. INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - UNLOCK LOGICAL RECORD SET
  761.     AH = D3h
  762. Return: AL = error code (see AH=D0h)
  763. Note:    unlocks all semaphores logged in the semaphore set of the requesting PC
  764. SeeAlso: AH=D1h,AH=D2h
  765. ----------21D4-------------------------------
  766. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - CLEAR LOGICAL RECORD
  767.     AH = D4h
  768.     DS:DX -> semaphore identifier (counted string up to 100 chars long)
  769. Return: AL = error code
  770.         00h successful
  771.         FFh not successful
  772. Note:    unlocks record and removes it from log table
  773. SeeAlso: AH=D5h
  774. ----------21D5-------------------------------
  775. INT 21 - Novell NetWare 4.0,Banyan VINES,Alloy NTNX - CLEAR LOGICAL RECORD SET
  776.     AH = D5h
  777. Return: AL = error code (see AH=D4h)
  778. Note:    unlocks and clears all semaphores associated with the semaphore set
  779.       of the requesting PC
  780. SeeAlso: AH=D4h
  781. ----------21D5-------------------------------
  782. INT 21 - VIRUS - "Carfield" - ???
  783.     AH = D5h
  784.     ???
  785. Return: ???
  786. SeeAlso: AX=D5AAh,AH=F3h"Carfield"
  787. ----------21D5AA-----------------------------
  788. INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
  789.     AX = D5AAh
  790. Return: AX = 2A55h if "Diamond-A" resident
  791.     AX = 2A03h if "Diamond-B"-family virus resident
  792. SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
  793. ----------21D5AABPDEAA-----------------------
  794. INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
  795.     AX = D5AAh
  796.     BP = DEAAh
  797. Return: SI = 4321h if resident
  798. SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
  799. ----------21D6-------------------------------
  800. INT 21 - Novell NetWare 4.0, Alloy NTNX - END OF JOB
  801.     AH = D6h
  802. Return: AL = error code
  803. Note:    unlocks and clears all locked or logged files and records held by
  804.       process, closes all files, resets error and lock modes, and releases
  805.       all network resources
  806. SeeAlso: AH=BBh
  807. ----------21D7-------------------------------
  808. INT 21 - Novell NetWare 4.0, Alloy NTNX - SYSTEM LOGOUT
  809.     AH = D7h
  810. Return: AL = error code
  811. ----------21D8-------------------------------
  812. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  813.     AH = D8h
  814.     DL = resource number
  815. Return: AL = status
  816.         00h successful
  817.         FFh unsucessful
  818. SeeAlso: AH=D9h
  819. ----------21D9-------------------------------
  820. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  821.     AH = D9h
  822.     DL = resource number
  823. Return:    AL = status (see AH=D8h)
  824. SeeAlso: AH=D8h
  825. ----------21DA-------------------------------
  826. INT 21 - Novell NetWare 4.0 - GET VOLUME STATISTICS
  827.     AH = DAh
  828.     DL = volume number
  829.     ES:DI -> reply buffer (see below)
  830. Return: AL = 00h
  831. SeeAlso: AH=36h
  832.  
  833. Format of reply buffer:
  834. Offset    Size    Description
  835.  00h    WORD    sectors/block
  836.  02h    WORD    total blocks
  837.  04h    WORD    unused blocks
  838.  06h    WORD    total directory entries
  839.  08h    WORD    unused directory entries
  840.  0Ah 16 BYTEs    volume name, null padded
  841.  1Ah    WORD    removable flag, 0000h = not removable
  842. ----------21DADA-----------------------------
  843. INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
  844.     AX = DADAh
  845. Return: AH = A5h
  846. SeeAlso: AX=D5AAh,AH=DAFEh"VIRUS"
  847. ----------21DAFE-----------------------------
  848. INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
  849.     AX = DAFEh
  850. Return: AX = 1234h if resident
  851. SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
  852. ----------21DB-------------------------------
  853. INT 21 - Novell NetWare 4.0, Alloy NTNX - GET NUMBER OF LOCAL DRIVES
  854.     AH = DBh
  855. Return: AL = number of local disks
  856. SeeAlso: AH=0Eh
  857. ----------21DC-------------------------------
  858. INT 21 - Novell NetWare 4.0, Banyan VINES, Alloy NTNX - GET STATION NUMBER
  859.     AH = DCh
  860. Return: AL = station number
  861.         00h if NetWare not loaded or this machine is a non-dedicated server
  862.     CX = station number in ASCII
  863. Note:    station number only unique for those PCs connected to same semaphore
  864.       service
  865. ----------21DC-------------------------------
  866. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  867.     AH = DCh
  868.     DX = state
  869.         0000h turn on
  870.         0001h turn off
  871. SeeAlso: AX=FEDCh
  872. ----------21DD-------------------------------
  873. INT 21 - Novell NetWare 4.0, Alloy NTNX - SET ERROR MODE
  874.     AH = DDh
  875.     DL = error mode
  876.         00h invoke INT 24 on critical I/O errors
  877.         01h return NetWare extended error code in AL
  878.         02h return error code in AL, mapped to standard DOS error codes
  879. Return: AL = previous error mode
  880. ----------21DD-------------------------------
  881. INT 21 - VIRUS - "Jerusalem"-family - ???
  882.     AH = DDh
  883.     ???
  884. Return: ???
  885. SeeAlso: AH=E0h"VIRUS",AH=EEh"VIRUS"
  886. ----------21DE-------------------------------
  887. INT 21 - Novell NetWare 4.0 - SET BROADCAST MODE
  888.     AH = DEh
  889.     AL = broadcast mode
  890.         00h receive console and workstation broadcasts
  891.         01h receive console broadcasts only
  892.         02h receive no broadcasts
  893.         03h store all broadcasts for retrieval
  894.         04h get broadcast mode
  895.         05h disable shell timer interrupt checks
  896.         06h enable shell timer interrupt checks
  897. Return: AL = old broadcast mode
  898. ----------21DE-------------------------------
  899. INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
  900.     AH = DEh
  901. Return: AH = DFh if resident
  902. SeeAlso: AX=DAFEh,AX=DEDEh"VIRUS"
  903. ----------21DE-------------------------------
  904. INT 21 - VIRUS - "April 1st EXE" - ???
  905.     AH = DEh
  906.     ???
  907. Return: ???
  908. ----------21DEDE-----------------------------
  909. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  910.     AX = DEDEh
  911. Return: AH = 41h if resident
  912. SeeAlso: AH=DEh"VIRUS",AH=E0h"VIRUS"
  913. ----------21DF-------------------------------
  914. INT 21 - Novell NetWare 4.0, Alloy NTNX - CAPTURE
  915.     AH = DFh
  916.     AL = subfunction
  917.         00h start LPT capture
  918.         01h end LPT capture
  919.         02h cancel LPT capture
  920.         03h flush LPT capture
  921.         04h start specific capture
  922.         05h end specific capture
  923.         06h cancel specific capture
  924.         07h flush specific capture
  925. Return: AL = error code
  926. Note:    under NTNX, only AL=00h-03h are supported, and all four send a print
  927.       break (see INT 17/AH=84h)
  928. ----------21E0-------------------------------
  929. INT 21 - Novell NetWare 4.0, Alloy NTNX - PRINT SPOOLING
  930.     AH = E0h
  931.     DS:SI -> request buffer
  932.     ES:DI -> reply buffer
  933.     subfunction in third byte of request buffer
  934.         00h spool data to a capture file
  935.         01h close and queue capture file
  936.         02h set spool flags
  937.         03h spool existing file
  938.         04h get spool queue entry
  939.         05h remove entry from spool queue
  940.         06h get printer status
  941.         09h create a disk capture file
  942. Return: AL = error code
  943. ----------21E0-------------------------------
  944. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  945.     AH = E0h
  946.     ???
  947. Return: ???
  948. SeeAlso: AH=E1h"OS/286"
  949. ----------21E0-------------------------------
  950. INT 21 - DoubleDOS - MENU CONTROL
  951.     AH = E0h
  952.     AL = subfunction
  953.         01h exchange tasks
  954.         73h resume invisible job if suspended
  955.         74h kill other job
  956.         75h suspend invisible job
  957. Note:    identical to AH=F0h
  958. SeeAlso: AH=F0h"DoubleDOS"
  959. ----------21E0-------------------------------
  960. INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
  961.     AH = E0h
  962. Return: AX = 0300h if "Jerusalem" resident
  963.     AX = DADAh if "Armagedon" resident
  964. SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
  965. ----------21E00F-----------------------------
  966. INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
  967.     AX = E00Fh
  968. Return: AX = 4C31h if resident
  969. SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
  970. ----------21E1-------------------------------
  971. INT 21 - Novell NetWare 4.0 - BROADCAST MESSAGES
  972.     AH = E1h
  973.     DS:SI -> request buffer
  974.     ES:DI -> reply buffer
  975.     subfunction in third byte of request buffer
  976.         00h send broadcast message
  977.         01h get broadcast message
  978.         02h disable station broadcasts
  979.         03h enable station broadcasts
  980.         04h send personal message
  981.         05h get personal message
  982.         06h open message pipe
  983.         07h close message pipe
  984.         08h check pipe status
  985.         09h broadcast to console
  986. Return: AL = error code
  987. ----------21E1-------------------------------
  988. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  989.     AH = E1h
  990.     ???
  991. Return: ???
  992. Note:    protected mode only???
  993. SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
  994. ----------21E1-------------------------------
  995. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  996.     AH = E1h
  997. SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  998. SeeAlso: AH=F1h"DoubleDOS"
  999. ----------21E1-------------------------------
  1000. INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
  1001.     AH = E1h
  1002. Return: AX = 0300h if "Mendoza" resident
  1003.     AX = 0400h if "Fu Manchu" resident
  1004. SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
  1005. ----------21E2-------------------------------
  1006. INT 21 - Novell NetWare 4.0, Alloy NTNX - DIRECTORY FUNCTIONS
  1007.     AH = E2h
  1008.     DS:SI -> request buffer
  1009.     ES:DI -> reply buffer
  1010.     subfunction in third byte of request buffer
  1011.         00h set directory handle
  1012.         01h get directory path
  1013.         02h scan directory information
  1014.         03h get effective directory rights
  1015.         04h modify maximum rights mask
  1016.         05h get volume number
  1017.         06h get volume name
  1018.         0Ah create directory
  1019.         0Bh delete directory
  1020.         0Ch scan directory for trustees
  1021.         0Dh add trustee to directory
  1022.         0Eh delete trustee from directory
  1023.         0Fh rename directory
  1024.         10h purge erased files
  1025.         11h restore erased file
  1026.         12h allocate permanent directory handle
  1027.         13h allocate temporary directory handle
  1028.         14h deallocate directory handle
  1029.         15h get volume info with handle
  1030.         16h allocate special temporary directory handle
  1031.         17h retrieve a short base handle (Advanced NetWare 2.0)
  1032.         18h restore a short base handle (Advanced NetWare 2.0)
  1033.         19h set directory information
  1034. Return: AL = error code
  1035. ----------21E2-------------------------------
  1036. INT 21 - OS/286, OS/386 - SET REAL PROCEDURE SIGNAL HANDLER
  1037.     AH = E2h
  1038.     ???
  1039. Return: ???
  1040. SeeAlso: AH=E0h"OS/286",AH=E1h"OS/286",AH=E6h"OS/286"
  1041. ----------21E2-------------------------------
  1042. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  1043.     AH = E2h
  1044.     AL = character
  1045. Return: AL = 00h successful
  1046.          01h buffer full (128 characters)
  1047. SeeAlso: AH=E1h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  1048. SeeAlso: AH=F2h"DoubleDOS"
  1049. ----------21E3-------------------------------
  1050. INT 21 - Novell NetWare 4.0, Alloy NTNX - CONNECTION CONTROL
  1051.     AH = E3h
  1052.     DS:SI -> request buffer
  1053.     ES:DI -> reply buffer
  1054.     subfunction in third byte of request buffer
  1055.         00h login
  1056.         01h change password
  1057.         02h map user to station set
  1058.         03h map object to number
  1059.         04h map number to object
  1060.         05h get station's logged information
  1061.         06h get station's root mask (obsolete)
  1062.         07h map group name to number
  1063.         08h map number to group name
  1064.         09h get memberset M of group G
  1065.         0Ah enter login area
  1066.         0Bh ???
  1067.         0Ch ???
  1068.         0Dh log network message
  1069.         0Eh get disk utilization (Advanced NetWare 1.0)
  1070.         0Fh scan file information (Advanced NetWare 1.0)
  1071.         10h set file information (Advanced NetWare 1.0)
  1072.         11h get file server information (Advanced NetWare 1.0)
  1073.         12h ???
  1074.         13h get internet address (Advanced NetWare 1.02)
  1075.         14h login to file server (Advanced NetWare 2.0)
  1076.         15h get object connection numbers (Advanced NetWare 2.0)
  1077.         16h get connection information (Advanced NetWare 1.0)
  1078.         32h create object (Advanced NetWare 1.0)
  1079.         33h delete object (Advanced NetWare 1.0)
  1080.         34h rename object (Advanced NetWare 1.0)
  1081.         35h get object ID (Advanced NetWare 1.0)
  1082.         36h get object name (Advanced NetWare 1.0)
  1083.         37h scan object (Advanced NetWare 1.0)
  1084.         38h change object security (Advanced NetWare 1.0)
  1085.         39h create property (Advanced NetWare 1.0)
  1086.         3Ah delete property (Advanced NetWare 1.0)
  1087.         3Bh change property security (Advanced NetWare 1.0)
  1088.         3Ch scan property (Advanced NetWare 1.0)
  1089.         3Dh read property value (Advanced NetWare 1.0)
  1090.         request buffer contains the property name in all caps
  1091.         property "IDENTIFICATION" returns the user's name
  1092.         3Eh write property value (Advanced NetWare 1.0)
  1093.         3Fh verify object password (Advanced NetWare 1.0)
  1094.         40h change object password (Advanced NetWare 1.0)
  1095.         41h add object to set (Advanced NetWare 1.0)
  1096.         42h delete object from set (Advanced NetWare 1.0)
  1097.         43h is object in set? (Advanced NetWare 1.0)
  1098.         44h close bindery (Advanced NetWare 1.0)
  1099.         45h open bindery (Advanced NetWare 1.0)
  1100.         46h get bindery access level (Advanced NetWare 1.0)
  1101.         47h scan object trustee paths (Advanced NetWare 1.0)
  1102.         C8h check console priviledges
  1103.         C9h get file server description strings
  1104.         CAh set file server date and time
  1105.         CBh disable file server login
  1106.         CCh enable file server login
  1107.         CDh get file server login status
  1108.         CEh purge all erased files
  1109.         CFh disable transaction tracking
  1110.         D0h enable transaction tracking
  1111.         D1h send console broadcast
  1112.         D2h clear connection number
  1113.         D3h down file server
  1114.         D4h get file system statistics
  1115.         D5h get transaction tracking statistics
  1116.         D6h read disk cache statistics
  1117.         D7h get drive mapping table
  1118.         D8h read physical disk statistics
  1119.         D9h get disk channel statistics
  1120.         DAh get connection's task information
  1121.         DBh get list of a connection's open files
  1122.         DCh get list of connections using a file
  1123.         DDh get physical record locks by connection and file
  1124.         DEh get physical record locks by file
  1125.         DFh get logical records by connection
  1126.         E0h get logical record information
  1127.         E1h get connection's semaphores
  1128.         E2h get semaphore information
  1129.         E3h get LAN driver's configuration information
  1130.         E5h get connection's usage statistics
  1131.         E6h get object's remaining disk space
  1132.         E7h get server LAN I/O statistics
  1133.         E8h get server miscellaneous information
  1134.         E9h get volume information
  1135. Return: AL = error code
  1136.  
  1137. Format of object property:
  1138. Offset    Size    Description
  1139.  00h 1-16 BYTEs    property name
  1140.   N    BYTE    flags
  1141.         bit 0: property is dynamic
  1142.             4: property belongs to set rather than item
  1143.  N+1    BYTE    security levels (see below)
  1144.     ???
  1145.  
  1146. Values for security levels:
  1147.  00h    everyone may access
  1148.  01h    only logged-in clients may access
  1149.  02h    only clients logged-in with object's name, type, and password
  1150.  03h    only clients logged-in with supervisor privileges
  1151.  04h    only NetWare may access
  1152. Note:    the above values are stored in a nybble; the high half-byte is write
  1153.       access and the low half-byte is read access
  1154.  
  1155. Values for object type:
  1156.  00h    unknown
  1157.  01h    user
  1158.  02h    user group
  1159.  03h    print queue
  1160.  04h    file server
  1161.  05h    job server
  1162.  06h    gateway
  1163.  07h    print server
  1164.  08h    archive queue
  1165.  09h    archive server
  1166.  0Ah    job queue
  1167.  0Bh    administration
  1168.  24h    remote bridge server
  1169.  47h    advertising print server
  1170.  FFh    wild (used only for finding objects)
  1171. ----------21E3-------------------------------
  1172. INT 21 - OS/286, OS/386 - ISSUE REAL INTERRUPT
  1173.     AH = E3h
  1174.     AL = interrupt number
  1175.     ???
  1176. Return: ???
  1177. Note:    protected mode only???
  1178. SeeAlso: AH=E1h"OS/286",INT 31/AX=0300h
  1179. ----------21E3-------------------------------
  1180. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  1181.     AH = E3h
  1182.     AL = character
  1183. Return: AL = 00h successful
  1184.          01h buffer full (128 characters)
  1185. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E8h"DoubleDOS"
  1186. SeeAlso: AH=F3h"DoubleDOS"
  1187. ----------21E4-------------------------------
  1188. INT 21 - Novell NetWare 4.0 - SET FILE ATTRIBUTES (FCB)
  1189.     AH = E4h
  1190.     CL = file attributes
  1191.         bit 0: read only
  1192.         1: hidden
  1193.         2: system
  1194.         7: shareable
  1195.     DX:DX -> FCB (see AH=0Fh)
  1196. Return: AL = error code
  1197. SeeAlso: AX=4301h
  1198. ----------21E4-------------------------------
  1199. INT 21 - VIRUS - "Anarkia" - INSTALLATION CHECK
  1200.     AH = E4h
  1201. Return: AH = 04h if resident
  1202. SeeAlso: AH=E1h"VIRUS",AH=E7h"VIRUS"
  1203. ----------21E400-----------------------------
  1204. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  1205.     AX = E400h
  1206. Return: AL = 00h if DoubleDOS not present
  1207.        = 01h if running in visible DoubleDOS partition
  1208.        = 02h if running in the invisible DoubleDOS partition
  1209. SeeAlso: AH=E5h"DoubleDOS",AX=F400h
  1210. ----------21E400-----------------------------
  1211. INT 21 - OS/286, OS/386 - CHAIN TO REAL-MODE HANDLER
  1212.     AX = E400h
  1213.     ???
  1214. Return: ???
  1215. Note:    protected mode only???
  1216. ----------21E402-----------------------------
  1217. INT 21 - OS/286, OS/386 - SET PROTECTED-MODE TASK GATE
  1218.     AX = E402h
  1219.     ???
  1220. Return: ???
  1221. Note:    protected mode only???
  1222. SeeAlso: AX=E403h
  1223. ----------21E403-----------------------------
  1224. INT 21 - OS/286, OS/386 - REMOVE PROTECTED-MODE TASK GATE
  1225.     AX = E403h
  1226.     ???
  1227. Return: ???
  1228. Note:    protected mode only???
  1229. SeeAlso: AX=E402h
  1230. ----------21E5-------------------------------
  1231. INT 21 - Novell NetWare 4.0 - UPDATE FILE SIZE (FCB)
  1232.     AH = E5h
  1233.     DS:DX -> FCB (see AH=0Fh)
  1234. Return: AL = error code
  1235. ----------21E5-------------------------------
  1236. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  1237.     AH = E5h
  1238. Return: AL = 00h no program in other partition
  1239.        = 01h program in other partition is running
  1240.        = 02h program in other partition is suspended
  1241. SeeAlso: AX=E400h"DoubleDOS",AH=F5h"DoubleDOS"
  1242. ----------21E500-----------------------------
  1243. INT 21 - OS/286, OS/386 - HEAP MANAGEMENT STRATEGY
  1244.     AX = E500h
  1245.     ???
  1246. Return: ???
  1247. SeeAlso: AX=E501h
  1248. ----------21E501-----------------------------
  1249. INT 21 - OS/286, OS/386 - FORCE HEAP COMPACTION
  1250.     AX = E501h
  1251.     ???
  1252. Return: ???
  1253. SeeAlso: AX=E500h
  1254. ----------21E6-------------------------------
  1255. INT 21 - Novell NetWare 4.0 - COPY FILE TO FILE (FCB)
  1256.     AH = E6h
  1257.     CX:DX = number of bytes to copy
  1258.     DS:SI -> source FCB
  1259.     ES:DI -> destination FCB
  1260. Return: AL = error code
  1261. ----------21E6-------------------------------
  1262. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE SIGNAL FROM PROTECTED MODE
  1263.     AH = E6h
  1264.     ???
  1265. Return: ???
  1266. Note:    protected mode only???
  1267. SeeAlso: AX=E2h"OS/286"
  1268. ----------21E7-------------------------------
  1269. INT 21 - Novell NetWare 4.0, Banyan VINES - GET FILE SERVER DATE AND TIME
  1270.     AH = E7h
  1271.     DS:DX -> date/time buffer (see below)
  1272. Return: AL = error code
  1273.         00h successful
  1274.         FFh unsuccessful
  1275. Note:    also supported by Alloy NTNX
  1276. SeeAlso: AH=2Ah,AH=2Ch
  1277.  
  1278. Format of date/time buffer:
  1279. Offset    Size    Description
  1280.  00h    BYTE    year - 1900
  1281.  01h    BYTE    month (1=Jan)
  1282.  02h    BYTE    day
  1283.  03h    BYTE    hours
  1284.  04h    BYTE    minutes
  1285.  05h    BYTE    seconds
  1286.  06h    BYTE    day of week (0 = Sunday) (Novell and NTNX only)
  1287. ----------21E7-------------------------------
  1288. INT 21 - OS/286, OS/386 - CREATE CODE SEGMENT
  1289.     AH = E7h
  1290.     ???
  1291. Return: ???
  1292. SeeAlso: AH=E8h"OS/286",AH=E9h"OS/286",AH=EAh"OS/286"
  1293. ----------21E7-------------------------------
  1294. INT 21 - VIRUS - "Spyer"/"Kiev" - INSTALLATION CHECK
  1295.     AH = E7h
  1296. Return: AH = 78h if resident
  1297. SeeAlso: AH=E4h"VIRUS",AX=EC59h
  1298. ----------21E8-------------------------------
  1299. INT 21 - Novell NetWare 4.6, Alloy NTNX - SET FCB RE-OPEN MODE
  1300.     AH = E8h
  1301.     DL = mode
  1302.         00h no automatic re-open
  1303.         01h auto re-open
  1304. Return: AL = error code
  1305. ----------21E8-------------------------------
  1306. INT 21 - OS/286, OS/386 - SEGMENT CREATION
  1307.     AH = E8h
  1308.     AL = type
  1309.         00h data segment
  1310.         01h data window/alias
  1311.         02h real segment
  1312.         03h real window/alias
  1313.         06h shareable segment
  1314.     ???
  1315. Return: ???
  1316. SeeAlso: AH=E7h"OS/286",AH=E9h"OS/286"
  1317. ----------21E8-------------------------------
  1318. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  1319.     AH = E8h
  1320.     AL = 00h set flags for this program
  1321.        = 01h set flags for other program
  1322.     DX = keyboard control flags (bit set enables, cleared disables
  1323.         bit 0: menu
  1324.         bit 1: exchange
  1325.         bit 2: entire keyboard enable/disable
  1326.         bit 3: Ctrl-C
  1327.         bit 4: Ctrl-PrtSc
  1328.         bit 5: Alt/Erase
  1329.         bit 6: Ctrl-Break
  1330.         bit 7: Ctrl-NumLock
  1331.         bit 8: shift-PrtSc
  1332.         bit 9-13: undefined
  1333.         bit 14: cancel key (clear keyboard buffer)
  1334.         bit 15: suspend key
  1335. Return: DX = previous flags
  1336. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  1337.       disabling any of the other keystrokes disables them completely
  1338.     identical to AH=F8h
  1339. SeeAlso: AH=E1h"DoubleDOS",AH=E2h"DoubleDOS",AH=E3h"DoubleDOS"
  1340. SeeAlso: AH=F8h"DoubleDOS"
  1341. ----------21E9-------------------------------
  1342. INT 21 - OS/286, OS/386 - CHANGE SEGMENTS
  1343.     AH = E9h
  1344.     AL = function
  1345.         01h change code segment parameters
  1346.         02h    change data segment parameters
  1347.         05h adjust segment limit
  1348.         06h change segment base address
  1349.     ???
  1350. Return: ???
  1351. Note:    protected mode only???
  1352. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=EAh"OS/286",AH=EDh"OS/286"
  1353. SeeAlso: INT 31/AX=0007h,INT 31/AX=0008h
  1354. ----------21E9-------------------------------
  1355. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  1356.     AH = E9h
  1357.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  1358.        = 01h visible program gets 50%, invisible gets 50%
  1359.        = 02h visible program gets 30%, invisible gets 70%
  1360.        = 03h Top program gets 70%, bottom program gets 30%
  1361.        = 04h Top program gets 30%, bottom program gets 70%
  1362.        = 05h get current priority
  1363.         Return: AL = priority setting
  1364. Note:    identical to AH=F9h
  1365. SeeAlso: AH=EAh"DoubleDOS",AH=EBh"DoubleDOS",AH=F9h"DoubleDOS"
  1366. ----------21E900-----------------------------
  1367. INT 21 - Novell NetWare 4.6, Alloy NTNX - SHELL'S "GET BASE STATUS"
  1368.     AX = E900h
  1369.     DX = drive number to check (0 = A:)
  1370. Return: AL = network pathbase
  1371.     AH = base flags
  1372.         00h drive not currently mapped to a base
  1373.         01h drive is mapped to a permanent base
  1374.         02h drive is mapped to a temporary base
  1375.         03h drive exists locally
  1376. ----------21E905-----------------------------
  1377. INT 21 - Novell NetWare shell 3.01 - MAP A FAKE ROOT DIRECTORY
  1378.     AX = E905h
  1379.     BL = drive number (0=default, 1=A:, ...)
  1380.     DS:DX -> ASCIZ path for fake root (may include server name or be empty)
  1381. Return: CF set on error
  1382.         AL = error code (03h,0Fh,11h) (see AH=59h)
  1383.     CF clear if successful
  1384. Note:    if drive is not currently mapped, a drive mapping will be created
  1385. SeeAlso: AX=E906h
  1386. ----------21E906-----------------------------
  1387. INT 21 - Novell NetWare shell 3.01 - DELETE FAKE ROOT DIRECTORY
  1388.     AX = E906h
  1389.     BL = drive number (0=default, 1=A:, ...)
  1390. Note:    drive remains mapped
  1391. SeeAlso: AX=E905h
  1392. ----------21E907-----------------------------
  1393. INT 21 - Novell NetWare shell 3.01 - GET RELATIVE DRIVE DEPTH
  1394.     AX = E907h
  1395.     BL = drive number (0=default, 1=A:, ...)
  1396. Return: AL = number of directories below the fake root
  1397.         FFh if no fake root assigned
  1398. SeeAlso: AX=E905h
  1399. ----------21E908BL00-------------------------
  1400. INT 21 - Novell NetWare shell 3.01 - SET SHOW DOTS
  1401.     AX = E908h
  1402.     BL = 00h    don't return '.' or '..' during directory scans
  1403.        = nonzero    directory scans will return '.' or '..' entries
  1404. Return: BL = previous show-dots setting
  1405. ----------21EA-------------------------------
  1406. INT 21 - Novell NetWare 4.6, Alloy NTNX - RETURN SHELL VERSION
  1407.     AH = EAh
  1408.     AL = return version environment string
  1409.         00h        don't return string
  1410.         nonzero    return string in 40-byte buffer pointed to by ES:DI
  1411.         Return: buffer filled with three null-terminated entries:
  1412.             major operating system
  1413.             version
  1414.             hardware type
  1415. Return: AH = operating system (00h = MSDOS)
  1416.     AL = hardware type
  1417.         00h IBM PC
  1418.         01h Victor 9000
  1419.     BH = major shell version
  1420.     BL = minor shell version
  1421.     CH = (v3.01+) shell type
  1422.         00h conventional memory
  1423.         01h expanded memory
  1424.         02h extended memory
  1425.     CL = shell revision number
  1426. ----------21EA-------------------------------
  1427. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  1428.     AH = EAh
  1429. Return: task switching turned off
  1430. SeeAlso: AH=E9h"DoubleDOS",AH=EBh"DoubleDOS",AH=FAh"DoubleDOS"
  1431. SeeAlso: INT FA"DoubleDOS"
  1432. ----------21EA-------------------------------
  1433. INT 21 - OS/286, OS/386 - ALLOCATE HUGE SEGMENT
  1434.     AH = EAh
  1435.     ???
  1436. Return: ???
  1437. Note:    protected mode only???
  1438. SeeAlso: AH=E7h"OS/286",AH=E8h"OS/286",AH=E9h"OS/286"
  1439. ----------21EB-------------------------------
  1440. INT 21 - Novell NetWare 4.6, Alloy NTNX - LOG FILE
  1441.     AH = EBh
  1442.     DS:DX -> ASCIZ filename
  1443.     if function C6h lock mode 01h:
  1444.         AL = flags
  1445.         00h log file only
  1446.         01h lock as well as log file
  1447.         BP = lock timeout in timer ticks (1/18 second)
  1448. Return: AL = error code
  1449.         00h successful
  1450.         96h no dynamic memory for file
  1451.         FEh timed out
  1452.         FFh failed
  1453. SeeAlso: AH=CAh,AH=ECh"Novell"
  1454. ----------21EB-------------------------------
  1455. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  1456.     AH = EBh
  1457. Return: task switching turned on
  1458. SeeAlso: AH=E9h"DoubleDOS",AH=EAh"DoubleDOS",AH=FBh"DoubleDOS"
  1459. SeeAlso: INT FB"DoubleDOS"
  1460. ----------21EB00-----------------------------
  1461. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY LINEAR ADDRESS
  1462.     AX = EB00h
  1463.     ???
  1464. Return: ???
  1465. Note:    protected mode only???
  1466. SeeAlso: AX=EB02h,AX=EB04h,INT 31/AX=0506h
  1467. ----------21EB02-----------------------------
  1468. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 16-BIT SEGMENT:OFFSET
  1469.     AX = EB02h
  1470.     ???
  1471. Return: ???
  1472. Note:    protected mode only???
  1473. SeeAlso: AX=EB00h,AX=EB04h
  1474. ----------21EB03-----------------------------
  1475. INT 21 - OS/386 VMM - FREE MAPPED PAGES
  1476.     AX = EB03h
  1477.     ???
  1478. Return: ???
  1479. Note:    protected mode only???
  1480. SeeAlso: AX=EB05h,INT 31/AX=0801h
  1481. ----------21EB04-----------------------------
  1482. INT 21 - OS/386 VMM - GET A PAGE TABLE ENTRY BY 32-BIT SEGMENT:OFFSET
  1483.     AX = EB04h
  1484.     ???
  1485. Return: ???
  1486. Note:    protected mode only???
  1487. SeeAlso: AX=EB00h,AX=EB02h
  1488. ----------21EB05-----------------------------
  1489. INT 21 - OS/386 VMM - MAP PAGES
  1490.     AX = EB05h
  1491.     ???
  1492. Return: ???
  1493. Note:    protected mode only???
  1494. SeeAlso: AX=EB03h,INT 31/AX=0800h
  1495. ----------21EB06-----------------------------
  1496. INT 21 - OS/386 VMM - LOCK PAGES IN MEMORY
  1497.     AX = EB06h
  1498.     ???
  1499. Return: ???
  1500. Note:    protected mode only???
  1501. SeeAlso: AX=EB07h,INT 31/AX=0600h
  1502. ----------21EB07-----------------------------
  1503. INT 21 - OS/386 VMM - UNLOCK MEMORY PAGES
  1504.     AX = EB07h
  1505.     ???
  1506. Return: ???
  1507. Note:    protected mode only???
  1508. SeeAlso: AX=EB06h,INT 31/AX=0601h
  1509. ----------21EC-------------------------------
  1510. INT 21 - Novell NetWare 4.6, Alloy NTNX - RELEASE FILE
  1511.     AH = ECh
  1512.     DS:DX -> ASCIZ filename
  1513. Return: none
  1514. SeeAlso: AH=EBh"Novell"
  1515. ----------21EC-------------------------------
  1516. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  1517.     AH = ECh
  1518. Return: ES = segment of virtual screen
  1519. Notes:    screen address can change if task-switching is on!!
  1520.     identical to AH=FCh
  1521. SeeAlso: AH=FCh"DoubleDOS",INT FC"DoubleDOS"
  1522. ----------21EC-------------------------------
  1523. INT 21 - OS/286, OS/386 - BLOCK TRANSFER
  1524.     AH = ECh
  1525.     ???
  1526. Return: ???
  1527. ----------21EC59-----------------------------
  1528. INT 21 - VIRUS - "Terror" - INSTALLATION CHECK
  1529.     AX = EC59h
  1530. Return: BP = EC59h if resident
  1531. SeeAlso: AH=E7h"VIRUS",AH=EEh"VIRUS"
  1532. ----------21ED-------------------------------
  1533. INT 21 - Novell NetWare, Alloy NTNX - CLEAR FILE
  1534.     AH = EDh
  1535.     DS:DX -> ASCIZ filename
  1536. Return: AL = error code
  1537. SeeAlso: AH=CEh,AH=EBh"Novell"
  1538. ----------21ED-------------------------------
  1539. INT 21 - OS/286, OS/386 - GET SEGMENT OR WINDOW DESCRIPTOR
  1540.     AH = EDh
  1541.     ???
  1542. Return: ???
  1543. Note:    protected mode only???
  1544. SeeAlso: AH=E9h"OS/286"
  1545. ----------21EE-------------------------------
  1546. INT 21 - Novell NetWare 4.6, Alloy NTNX - GET PHYSICAL STATION NUMBER
  1547.     AH = EEh
  1548. Return: CX:BX:AX = six-byte address
  1549. ----------21EE-------------------------------
  1550. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  1551.     AH = EEh
  1552.     AL = number of 55ms time slices to give away
  1553. Return: returns after giving away time slices
  1554. SeeAlso: AH=FEh"DoubleDOS",INT FE"DoubleDOS"
  1555. ----------21EE-------------------------------
  1556. INT 21 - VIRUS - "Jerusalem-G", "Pregnant" - INSTALLATION CHECK
  1557.     AH = EEh
  1558. Return: AX = 0300h if "Jerusalem-G" resident
  1559.     AL = 05h if "Pregnant" resident
  1560. SeeAlso: AH=DDh"VIRUS",AX=EC59h,AH=F0h"VIRUS"
  1561. ----------21EF-------------------------------
  1562. INT 21 - Novell Advanced NetWare 1.0+ - GET DRIVE INFO
  1563.     AH = EFh
  1564.     AL = subfunction
  1565.         00h get drive handle table
  1566.         01h get drive flag table
  1567.         02h get drive connection ID table
  1568.         03h get connection ID table (see below)
  1569.         04h get file server name table
  1570. Return: ES:DI -> shell status table
  1571. Note:    drive handle, flag, and connection ID tables each contain 32 entries
  1572.  
  1573. Format of connection ID table:
  1574. Offset    Size    Description
  1575.  00h    BYTE    in use flag
  1576.         E0h AES temporary
  1577.         F8h IPX in critical section
  1578.         FAh processing
  1579.         FBh holding
  1580.         FCh AES waiting
  1581.         FDh waiting
  1582.         FEh receiving
  1583.         FFh sending
  1584.  01h    BYTE    order number
  1585.  02h    DWORD    file server's network address (high byte first)
  1586.  06h  6 BYTEs    file server's node address (high byte first)
  1587.  0Ch    WORD    socket number (high byte first)
  1588.  0Eh    WORD    base receive timeout in clock ticks (high byte first)
  1589.  10h  6 BYTEs    preferred routing node (high byte first)
  1590.  16h    BYTE    packet sequence number
  1591.  17h    BYTE    connection number
  1592.  18h    BYTE    connection status (FFh if active)
  1593.  19h    WORD    maximum receive timeout in clock ticks (high byte first)
  1594.  1Bh  5 BYTEs    reserved
  1595.  
  1596. Values in drive flag table:
  1597.  00h    drive is not mapped
  1598.  01h    permanent network drive
  1599.  02h    temporary network drive
  1600.  80h    mapped to local drive
  1601.  81h    local drive used as permanent network drive
  1602.  82h    local drive used as temporary network drive
  1603. ----------21F0-------------------------------
  1604. INT 21 - Novell Advanced NetWare 1.0+ - CONNECTION ID
  1605.     AH = F0h
  1606.     AL = subfunction
  1607.         00h set preferred connection ID
  1608.         01h get preferred connection ID
  1609.         02h get default connection ID
  1610.         03h LPT capture active
  1611.         04h set primary connection ID
  1612.         05h get primary connection ID
  1613.     DL = preferred file server
  1614. Return: AL = selected file server
  1615. ----------21F0-------------------------------
  1616. INT 21 - DoubleDOS - MENU CONTROL
  1617.     AH = F0h
  1618.     AL = subfunction
  1619.         01h exchange tasks
  1620.         73h resume invisible job if suspended
  1621.         74h kill other job
  1622.         75h suspend invisible job
  1623. Note:    identical to AH=E0h
  1624. SeeAlso: AH=E0h"DoubleDOS"
  1625. ----------21F0-------------------------------
  1626. INT 21 - VIRUS - "Frere Jacques" - INSTALLATION CHECK
  1627.     AH = F0h
  1628. Return: AX = 0300h if resident
  1629. SeeAlso: AH=EEh"VIRUS",AH=F1h"VIRUS"
  1630. ----------21F1-------------------------------
  1631. INT 21 - Novell Advanced NetWare 1.0+ - FILE SERVER CONNECTION
  1632.     AH = F1h
  1633.     AL = subfunction
  1634.         00h attach to file server
  1635.         DL = preferred file server
  1636.         01h detach from file server
  1637.         02h logout from file server
  1638. Return: AL = completion code
  1639. ----------21F1-------------------------------
  1640. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  1641.     AH = F1h
  1642. SeeAlso: AH=E1h"DoubleDOS",AH=F2h"DoubleDOS",AH=F3h"DoubleDOS"
  1643. SeeAlso: AH=F8h"DoubleDOS"
  1644. ----------21F1-------------------------------
  1645. INT 21 - VIRUS - "F1-337" - ???
  1646.     AH = F1h
  1647.     ???
  1648. Return: ???
  1649. SeeAlso: AH=F0h"VIRUS",AX=F2AAh
  1650. ----------21F2-------------------------------
  1651. INT 21 - Novell NetWare v3.01+ shell interface - MULTIPLEXOR
  1652.     AH = F2h
  1653.     AL = function
  1654.         15h broadcast services (see AH=E1h)
  1655.         17h connection control (see AH=E3h)
  1656.     DS:SI -> request buffer
  1657.     ES:DI -> reply buffer
  1658. Return: ???
  1659. Notes:    this is a multiplexor to access other net interface functions which
  1660.       were accessed via a separate AH function in older versions
  1661.     the function number in AL is added to CCh to get the old function
  1662.       number which is desired
  1663. ----------21F2-------------------------------
  1664. INT 21 - DoubleDOS - SEND CHARACTER TO KEYBOARD BUFFER OF OTHER JOB
  1665.     AH = F2h
  1666.     AL = character
  1667. Return: AL = 00h successful
  1668.          01h buffer full (128 characters)
  1669. SeeAlso: AH=E2h"DoubleDOS",AH=F1h"DoubleDOS",AH=F3h"DoubleDOS"
  1670. SeeAlso: AH=F8h"DoubleDOS"
  1671. ----------21F2AA-----------------------------
  1672. INT 21 - VIRUS - "PcVrsDs" - INSTALLATION CHECK
  1673.     AX = F2AAh
  1674. Return: AH = AAh if resident
  1675. SeeAlso: AH=F1h"VIRUS",AH=F3h"VIRUS"
  1676. ----------21F3-------------------------------
  1677. INT 21 - Novell Advanced NetWare 2.0+ - FILE SERVER FILE COPY
  1678.     AH = F3h
  1679.     ES:DI -> request string (see below)
  1680. Return: AL = status/error code
  1681.     CX:DX = number of bytes copied
  1682.  
  1683. Format of request string:
  1684. Offset    Size    Description
  1685.  00h    WORD    source file handle
  1686.  02h    WORD    destination file handle
  1687.  04h    DWORD    starting offset in source
  1688.  08h    DWORD    starting offset in destination
  1689.  0Ch    DWORD    number of bytes to copy
  1690. ----------21F3-------------------------------
  1691. INT 21 - DoubleDOS - ADD CHARACTER TO KEYBOARD BUFFER OF CURRENT JOB
  1692.     AH = F3h
  1693.     AL = character
  1694. Return: AL = 00h successful
  1695.          01h buffer full (128 characters)
  1696. SeeAlso: AH=E3h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  1697. SeeAlso: AH=F8h"DoubleDOS"
  1698. ----------21F3-------------------------------
  1699. INT 21 - VIRUS - "Carfield" - INSTALLATION CHECK
  1700.     AH = F3h
  1701. Return: AX = 0400h if resident
  1702. SeeAlso: AH=D5h"Carfield",AX=F2AAh,AH=F7h"VIRUS"
  1703. ----------21F400-----------------------------
  1704. INT 21 - DoubleDOS - INSTALLATION CHECK/PROGRAM STATUS
  1705.     AX = F400h
  1706. Return: AL = 00h if DoubleDOS not present
  1707.        = 01h if running in visible DoubleDOS partition
  1708.        = 02h if running in the invisible DoubleDOS partition
  1709. SeeAlso: AX=E400h,AH=F5h"DoubleDOS"
  1710. ----------21F5-------------------------------
  1711. INT 21 - DoubleDOS - OTHER PROGRAM STATUS
  1712.     AH = F5h
  1713. Return: AL = 00h no program in other partition
  1714.        = 01h program in other partition is running
  1715.        = 02h program in other partition is suspended
  1716. SeeAlso: AH=E5h"DoubleDOS",AX=F400h"DoubleDOS"
  1717. ----------21F7-------------------------------
  1718. INT 21 - VIRUS - "GP1" - INSTALLATION CHECK
  1719.     AH = F7h
  1720. Return: AX = 0300h if resident
  1721. SeeAlso: AH=F0h"VIRUS",AH=FBh"VIRUS"
  1722. ----------21F8-------------------------------
  1723. INT 21 - DOS v??? - SET OEM INT 21 HANDLER
  1724.     AH = F8h
  1725.     DS:DX -> OEM INT 21 handler for functions F9h to FFh
  1726.          FFFFh:FFFFh resets to original handlers
  1727.  
  1728. Notes:    calls to AH=F9h through AH=FFH will return CF set and AX=1 (invalid
  1729.       function) if no handler set
  1730.     handler is called with all registers exactly as set by caller, and
  1731.       should exit with IRET
  1732. SeeAlso: AH=F9h"OEM"
  1733. ----------21F8-------------------------------
  1734. INT 21 - DoubleDOS - SET/RESET KEYBOARD CONTROL FLAGS
  1735.     AH = F8h
  1736.     AL = 00h set flags for this program
  1737.        = 01h set flags for other program
  1738.     DX = keyboard control flags (bit set enables, cleared disables)
  1739.         bit 0: menu
  1740.         bit 1: exchange
  1741.         bit 2: entire keyboard enable/disable
  1742.         bit 3: Ctrl-C
  1743.         bit 4: Ctrl-PrtSc
  1744.         bit 5: Alt/Erase
  1745.         bit 6: Ctrl-Break
  1746.         bit 7: Ctrl-NumLock
  1747.         bit 8: shift-PrtSc
  1748.         bit 9-13: undefined
  1749.         bit 14: cancel key (clear keyboard buffer)
  1750.         bit 15: suspend key
  1751. Return: DX = previous flags
  1752. Notes:    disabling Ctrl-PrtSc will allow the program to intercept the keystroke;
  1753.       disabling any of the other keystrokes disables them completely
  1754.     identical to AH=E8h
  1755. SeeAlso: AH=E8h"DoubleDOS",AH=F1h"DoubleDOS",AH=F2h"DoubleDOS"
  1756. SeeAlso: AH=F3h"DoubleDOS"
  1757. ----------21F9-------------------------------
  1758. INT 21 - DOS v??? - OEM FUNCTION
  1759.     AH = F9h
  1760. SeeAlso: AH=F8h"OEM",AH=FAh"OEM"
  1761. ----------21F9-------------------------------
  1762. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  1763.     AH = F9h
  1764.     AL = 00h visible program gets 70%, invisible gets 30% (default)
  1765.        = 01h visible program gets 50%, invisible gets 50%
  1766.        = 02h visible program gets 30%, invisible gets 70%
  1767.        = 03h Top program gets 70%, bottom program gets 30%
  1768.        = 04h Top program gets 30%, bottom program gets 70%
  1769.        = 05h get current priority
  1770.         Return: AL = priority setting
  1771. Note:    identical to AH=E9h
  1772. SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS"
  1773. ----------21FA-------------------------------
  1774. INT 21 - DOS v??? - OEM FUNCTION
  1775.     AH = FAh
  1776. SeeAlso: AH=F9h"OEM",AH=FBh"OEM"
  1777. ----------21FA-------------------------------
  1778. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  1779.     AH = FAh
  1780. Return: task switching turned off
  1781. SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS"
  1782. SeeAlso: INT FA"DoubleDOS"
  1783. ----------21FA--DX5945-----------------------
  1784. INT 21 - PC Tools 7 VDEFEND - API
  1785.     AH = FAh
  1786.     DX = 5945h
  1787.     AL = function
  1788.         00h NOP
  1789.         01h uninstall
  1790.         Return: CF clear if successful
  1791.             DI = 4559h
  1792.         02h ???
  1793.         BL = ???
  1794.         Return: CF clear
  1795.             CL = old value of ???
  1796. SeeAlso: INT 2F/AX=6282h
  1797. ----------21FB-------------------------------
  1798. INT 21 - DOS v??? - OEM FUNCTION
  1799.     AH = FBh
  1800. SeeAlso: AH=FAh"OEM",AH=FCh"OEM"
  1801. ----------21FB-------------------------------
  1802. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  1803.     AH = FBh
  1804. Return: task switching turned on
  1805. SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS"
  1806. SeeAlso: INT FB"DoubleDOS"
  1807. ----------21FB-------------------------------
  1808. INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK
  1809.     AH = FBh
  1810. Return: AH = 00h if resident
  1811. SeeAlso: AH=F7h"VIRUS",AX=FB0Ah
  1812. ----------21FB0A-----------------------------
  1813. INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK
  1814.     AX = FB0Ah
  1815. Return: AX = 0AFBh if resident
  1816. SeeAlso: AH=FBh"VIRUS",AH=FDh"VIRUS"
  1817. ----------21FC-------------------------------
  1818. INT 21 - DOS v??? - OEM FUNCTION
  1819.     AH = FCh
  1820. SeeAlso: AH=FBh"OEM",AH=FDh"OEM"
  1821. ----------21FC-------------------------------
  1822. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  1823.     AH = FCh
  1824. Return: ES = segment of virtual screen
  1825. Notes:    screen address can change if task-switching is on!!
  1826.     identical to AH=ECh
  1827. SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS"
  1828. ----------21FD-------------------------------
  1829. INT 21 - DOS v??? - OEM FUNCTION
  1830.     AH = FDh
  1831. SeeAlso: AH=FCh"OEM",AH=FEh"DOS"
  1832. ----------21FD-------------------------------
  1833. INT 21 - VIRUS - "Border" - INSTALLATION CHECK
  1834.     AH = FDh
  1835. Return: AH = 13h if resident
  1836. SeeAlso: AH=FB0Ah,AH=FEh"VIRUS"
  1837. ----------21FE-------------------------------
  1838. INT 21 - DOS v??? - OEM FUNCTION
  1839.     AH = FEh
  1840. SeeAlso: AH=FDh"OEM",AH=FFh"OEM"
  1841. ----------21FE-------------------------------
  1842. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  1843.     AH = FEh
  1844.     AL = number of 55ms time slices to give away
  1845. Return: returns after giving away time slices
  1846. SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS"
  1847. ----------21FE-------------------------------
  1848. INT 21 - VIRUS - "483" - INSTALLATION CHECK
  1849.     AH = FEh
  1850. Return: AH = 00h if resident
  1851. SeeAlso: AH=FDh"VIRUS",AX=FE01h
  1852. ----------21FE01-----------------------------
  1853. INT 21 - VIRUS - "Flip" - INSTALLATION CHECK
  1854.     AX = FE01h
  1855. Return: AX = 01FEh if resident
  1856. SeeAlso: AH=FEh"VIRUS",AX=FE02h
  1857. ----------21FE02-----------------------------
  1858. INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK
  1859.     AX = FE02h
  1860. Return: AX = 01FDh if resident
  1861. SeeAlso: AX=FE01h,AX=FEDCh"VIRUS"
  1862. ----------21FEDC-----------------------------
  1863. INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
  1864.     AX = FEDCh
  1865. Return: AX = CDEFh if installed
  1866. SeeAlso: AH=DCh
  1867. ----------21FEDC-----------------------------
  1868. INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK
  1869.     AX = FEDCh
  1870. Return: AL = DCh if resident
  1871. SeeAlso: AX=FE02h,AH=FFh"VIRUS"
  1872. ----------21FF-------------------------------
  1873. INT 21 - DOS v??? - OEM FUNCTION
  1874.     AH = FFh
  1875. SeeAlso: AH=FEh"OEM"
  1876. ----------21FF-------------------------------
  1877. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  1878.     AH = FFH
  1879.     AL = subfunction
  1880.         00h add installable command
  1881.            BL = mode - bit 0 = 1 callable from DOS prompt
  1882.                bit 1 = 1 callable from application
  1883.            DS:SI -> CR-terminated command name
  1884.            ES:DI -> FAR routine entry point
  1885.         01h remove installable command
  1886.            DS:SI -> CR-terminated command name
  1887.         02h reserved, may be used to test for CED installation
  1888. Return: CF clear if successful
  1889.     CF set on error
  1890.         AX = 01h invalid function
  1891.          02h command not found (subfunction 01h only)
  1892.          08h insufficient memory (subfunction 00h only)
  1893.          0Eh bad data (subfunction 00h only)
  1894.     AH = FFh if CED not installed
  1895. Note:    CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  1896. SeeAlso: AX=0A00h
  1897. ----------21FF-------------------------------
  1898. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  1899.     AH = FFh
  1900.     AL = function
  1901.         01h create file
  1902.         02h open file
  1903.         03h get file statistics
  1904.         04h get time of day
  1905.         05h set time of day
  1906.         06h stat
  1907.         07h system
  1908. SeeAlso: INT 10/AH=FFh"GO32"
  1909. ----------21FF-------------------------------
  1910. INT 21 - DOSED.COM - INSTALLATION CHECK
  1911.     AH = FFh
  1912.     DS:SI -> "DOSED"
  1913.     ES = 0000h
  1914. Return: ES:DI -> "DOSED" if installed
  1915. Note:    DOSED is a free DOS commandline editor/history buffer by Sverre H.
  1916.       Huseby
  1917. ----------21FF-------------------------------
  1918. INT 21 - Topware Network Operating System - ???
  1919.     AH = FFh
  1920.     ???
  1921. Return: ???
  1922. SeeAlso: INT 2F/AX=FF00h
  1923. ----------21FF-------------------------------
  1924. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  1925.     AH = FFh
  1926. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  1927.     AX = 0400h if "Sunday" resident
  1928. SeeAlso: AX=FEDCh"VIRUS",AX=FF0Fh"VIRUS"
  1929. ----------21FF0F-----------------------------
  1930. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  1931.     AX = FF0Fh
  1932. Return: AX = 0101h if resident
  1933. Note:    FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  1934.       Software Concepts Design
  1935. ----------21FF0F-----------------------------
  1936. INT 21 - VIRUS - "PSQR/1720" - INSTALLATION CHECK
  1937.     AX = FF0Fh
  1938. Return: AX = 0101h if resident
  1939. SeeAlso: AH=FFh"VIRUS",AX=FF10h
  1940. ----------21FF10-----------------------------
  1941. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  1942.     AX = FF10h
  1943. Return: AL = 07h if resident
  1944. SeeAlso: AX=FF0Fh"VIRUS",AX=FFFEh
  1945. ----------21FFFE-----------------------------
  1946. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  1947.     AX = FFFEh
  1948. Return: AX = 0815h if resident
  1949. SeeAlso: AX=FF10h,AX=FFFFh
  1950. ----------21FFFF-----------------------------
  1951. INT 21 - VIRUS - "Ontario" - INSTALLATION CHECK
  1952.     AX = FFFFh
  1953. Return: AX = 0000h if resident
  1954. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  1955. ----------21FFFFCX0000-----------------------
  1956. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  1957.     AX = FFFFh
  1958.     CX = 0000h
  1959. Return: CX = 0006h if resident
  1960. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  1961. ----------22---------------------------------
  1962. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  1963.    specifies the address of the routine which is to be given control after
  1964.    a program is terminated; should never be called directly, since it does not
  1965.    point at an interrupt handler
  1966. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  1967.       termination, and then a FAR JMP is performed to the address in INT 22
  1968.     normally points at the instruction immediately following INT 21/AH=4Bh
  1969.       call which loaded the current program
  1970. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  1971. ----------23---------------------------------
  1972. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  1973.    invoked whenever DOS detects a ^C or ^Break; should never be called directly
  1974. ---DOS 1.x---
  1975. Return: AH = 00h abort program
  1976.     if all registers preserved, restart DOS call
  1977. ---DOS 2+---
  1978. Return: all registers preserved
  1979.     return via RETF or RETF 2 with CF set
  1980.         DOS will abort program with errorlevel 0
  1981.     else (RETF/RETF 2 with CF clear or IRET)
  1982.         interrupted DOS call is restarted
  1983. Notes:    MSDOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  1984.     any DOS call may safely be made within the INT 23 handler, although
  1985.       the handler must to check for a recursive invocation if it does
  1986.       call DOS
  1987. SeeAlso: INT 1B
  1988. ----------24---------------------------------
  1989. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  1990.    invoked when a critical (usually hardware) error is encountered; should
  1991.    never be called directly
  1992.  
  1993. Critical error handler is invoked with:
  1994.     AH = type and processing flags
  1995.         bit 7 clear = disk I/O error
  1996.           set    = -- if block device, bad FAT image in memory
  1997.               -- if char device, error code in DI
  1998.         bit 6  unused
  1999.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  2000.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  2001.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  2002.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  2003.         bit 1 /            10 = root dir  11 = data area
  2004.         bit 0 = 1 if write, 0 if read
  2005.     AL = drive number if AH bit 7 clear
  2006.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  2007.     DI low byte contains error code if AH bit 7 set
  2008.        00h write-protection violation attempted
  2009.        01h unknown unit for driver
  2010.        02h drive not ready
  2011.        03h unknown command given to driver
  2012.        04h data error (bad CRC)
  2013.        05h bad device driver request structure length
  2014.        06h seek error
  2015.        07h unknown media type
  2016.        08h sector not found
  2017.        09h printer out of paper
  2018.        0Ah write fault
  2019.        0Bh read fault
  2020.        0Ch general failure
  2021.        0Dh (DOS 3+) sharing violation
  2022.        0Eh (DOS 3+) lock violation
  2023.        0Fh invalid disk change
  2024.        10h (DOS 3+) FCB unavailable
  2025.        11h (DOS 3+) sharing buffer overflow
  2026.        12h (DOS 4+) code page mismatch
  2027.        13h (DOS 4+) out of input
  2028.        14h (DOS 4+) insufficient disk space
  2029.     STACK:    DWORD    return address for INT 24 call
  2030.         WORD    flags pushed by INT 24
  2031.         WORD    original AX on entry to INT 21
  2032.         WORD    BX
  2033.         WORD    CX
  2034.         WORD    DX
  2035.         WORD    SI
  2036.         WORD    DI
  2037.         WORD    BP
  2038.         WORD    DS
  2039.         WORD    ES
  2040.         DWORD    return address for INT 21 call
  2041.         WORD    flags pushed by INT 21
  2042. Handler must return:
  2043.     AL = action code
  2044.         00h ignore error and continue processing request
  2045.         01h retry operation
  2046.         02h terminate program through the equivalent of INT 21/AH=4Ch
  2047.             (INT 20h for DOS 1.x)
  2048.         03h fail system call in progress
  2049.     SS,SP,DS,ES,BX,CX,DX preserved
  2050. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  2051.     if the handler returns to the application by popping the stack, DOS
  2052.       will be in an unstable state until the first call with AH > 0Ch
  2053.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  2054.       critical errors
  2055.     if IGNORE specified but not allowed, it is turned into FAIL
  2056.     if RETRY specified but not allowed, it is turned into FAIL
  2057.     if FAIL specified but not allowed, it is turned into ABORT
  2058.     (DOS 3+) if a critical error occurs inside the critical error handler,
  2059.       the DOS call is automatically failed
  2060. ----------25---------------------------------
  2061. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  2062.     AL = drive number (00h = A:, 01h = B:, etc)
  2063.     CX = number of sectors to read
  2064.     DX = starting logical sector number (0000h - highest sector on drive) 
  2065.     DS:BX -> buffer for data
  2066. Return: CF clear if successful
  2067.     CF set on error
  2068.         AH = status
  2069.          80h device failed to respond (timeout)
  2070.          40h seek operation failed
  2071.          20h controller failed
  2072.          10h data error (bad CRC)
  2073.          08h DMA failure
  2074.          04h requested sector not found
  2075.          03h write-protected disk (INT 26 only)
  2076.          02h bad address mark
  2077.          01h bad command
  2078.         AL = error code (same as passed to INT 24 in DI)
  2079.     may destroy all other registers except segment registers
  2080. Notes:    original flags are left on stack, and must be popped by caller
  2081.     this call bypasses the DOS filesystem
  2082. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  2083.     invalid drive number
  2084. SeeAlso: INT 13/AH=02h,INT 26
  2085. ----------25---------------------------------
  2086. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  2087.     AL = drive number (0=A, 1=B, etc)
  2088.     CX = FFFFh
  2089.     DS:BX -> disk read packet (see below)
  2090. Return: same as above
  2091. Notes:    partition is potentially >32M (and requires this form of the call) if
  2092.       bit 1 of device attribute word in device driver is set
  2093.     original flags are left on stack, and must be removed by caller
  2094.     this call bypasses the DOS filesystem
  2095. SeeAlso: INT 13/AH=02h,INT 26
  2096.  
  2097. Format of disk read packet:
  2098. Offset    Size    Description
  2099.  00h    DWORD    sector number
  2100.  04h    WORD    number of sectors to read
  2101.  06h    DWORD    transfer address
  2102. ----------25CDCD-----------------------------
  2103. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  2104.     AX = CDCDh
  2105.     DS:BX -> buffer for address (see below)
  2106.     CX = 0001h
  2107.     DX = 0000h
  2108. Return: AX = CDCDh if Stacker installed
  2109.         DS:BX buffer filled
  2110.  
  2111. Format of driver address buffer:
  2112. Offset    Size    Description
  2113.  00h    WORD    signature CDCDh
  2114.  02h    WORD    ??? 0001h
  2115.  04h    DWORD    pointer to start of Stacker device driver
  2116.  
  2117. Format of device driver:
  2118. Offset    Size    Description
  2119.  00h    WORD    signature A55Ah
  2120.  02h    WORD    Stacker version * 64h
  2121.  04h    WORD    offset of volume-specific information offset table
  2122.         (list of WORDs, one per drive, containing offsets to various
  2123.         information)
  2124.  06h 56 BYTEs    n/a
  2125.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  2126.         (use to index into volume-specific info offset table)
  2127.  3Fh 19 BYTEs    n/a
  2128.  52h  4 BYTEs    ASCII string "SWAP"
  2129.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  2130.  
  2131. Format of Stacker boot record:
  2132. Offset    Size    Description
  2133. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  2134. 1F8h    DWORD    pointer to start of Stacker device driver
  2135. 1FCh    WORD    Stacker volume number
  2136. 1FEh    WORD    ???
  2137. ----------25----ALFF-------------------------
  2138. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  2139.     AL = FFh
  2140.     SI = 4358h
  2141. Return: SI = 6378h if installed
  2142.         CX = segment of device driver PC-CACHE.SYS
  2143.         DX = version (major in DH, minor in DL)
  2144. Note:    PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  2145.       access to certain disk drivers for devices such as Bernoulli drives
  2146. SeeAlso: INT 13/AH=A0h
  2147. ----------26---------------------------------
  2148. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  2149.     AL = drive number (00h = A:, 01h = B:, etc)
  2150.     CX = number of sectors to write
  2151.     DX = starting logical sector number (0000h - highest sector on drive) 
  2152.     DS:BX -> data to write
  2153. Return: CF clear if successful
  2154.     CF set on error
  2155.         AH = status
  2156.          80h device failed to respond (timeout)
  2157.          40h seek operation failed
  2158.          20h controller failed
  2159.          10h data error (bad CRC)
  2160.          08h DMA failure
  2161.          04h requested sector not found
  2162.          03h write-protected disk (INT 26 only)
  2163.          02h bad address mark
  2164.          01h bad command
  2165.         AL = error code (same as passed to INT 24 in DI)
  2166.     may destroy all other registers except segment registers
  2167. Notes:    original flags are left on stack, and must be popped by caller
  2168.     this call bypasses the DOS filesystem
  2169. BUG:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  2170.     invalid drive number
  2171. SeeAlso: INT 13/AH=03h,INT 25
  2172. ----------26---------------------------------
  2173. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  2174.     AL = drive number (0=A, 1=B, etc)
  2175.     CX = FFFFh
  2176.     DS:BX -> disk write packet (see below)
  2177. Return: same as above
  2178. Notes:    partition is potentially >32M (and requires this form of the call) if
  2179.       bit 1 of device attribute word in device driver is set
  2180.     original flags are left on stack, and must be removed by caller
  2181.     this call bypasses the DOS filesystem
  2182. SeeAlso: INT 13/AH=03h,INT 25
  2183.  
  2184. Format of disk write packet:
  2185. Offset    Size    Description
  2186.  00h    DWORD    sector number
  2187.  04h    WORD    number of sectors to read
  2188.  06h    DWORD    transfer address
  2189. ----------27---------------------------------
  2190. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  2191.     DX = number of bytes to keep resident (max FFF0h)
  2192.     CS = segment of PSP
  2193. Return: never
  2194. Notes:    this is an obsolete call
  2195.     INT 22, INT 23, and INT 24 are restored from the PSP
  2196.     does not close any open files
  2197.     the minimum number of bytes which will remain resident is 110h for
  2198.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  2199.       implements this service in COMMAND.COM rather than the DOS kernel
  2200. SeeAlso: INT 21/AH=31h
  2201. ----------28---------------------------------
  2202. INT 28 - DOS 2+ - DOS IDLE INTERRUPT
  2203.    Invoked each time one of the DOS character input functions loops while
  2204.    waiting for input.  Since a DOS call is in progress even though DOS is
  2205.    actually idle during such input waits, hooking this function is necessary
  2206.    to allow a TSR to perform DOS calls while the foreground program is
  2207.    waiting for user input.  The INT 28h handler may invoke any INT 21 function
  2208.    except functions 00h through 0Ch.  Under DOS 2.x, the critical error flag
  2209.    (the byte immediately after the InDOS flag) must be set in order to call
  2210.    DOS functions 50h/51h without destroying the DOS stacks.
  2211.  
  2212. Notes:    calls to INT 21/AH=3Fh,40h may not use a handle which refers to CON
  2213.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  2214.       set to 01h; if larger, DOS is truly busy and should not be reentered
  2215.     the default handler is an IRET instruction
  2216.     supported in OS/2 compatibility box
  2217. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h
  2218. ----------29---------------------------------
  2219. INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
  2220.     AL = character to display
  2221. Return: nothing
  2222. Notes:    automatically called when writing to a device with bit 4 of its device
  2223.       driver header set (see also INT 21/AH=52h)
  2224.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  2225.       vector and assume that ANSI.SYS is installed if the segment is larger
  2226.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  2227.     the default handler under DESQview 2.2 understands the <Esc>[2J
  2228.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  2229. SeeAlso: INT 79
  2230. ----------2A00-------------------------------
  2231. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  2232.     AH = 00h
  2233. Return: AH <> 00h if installed
  2234. SeeAlso: INT 5C
  2235. ----------2A0000-----------------------------
  2236. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  2237.     AX = 0000h
  2238. Return: AH = DDh
  2239. SeeAlso: INT 5B
  2240. ----------2A01-------------------------------
  2241. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  2242.     AH = 01h
  2243.     ES:BX -> NCB (see INT 5C)
  2244. Return: AL = NetBIOS error code
  2245.     AH = 00h if no error
  2246.        = 01h on error
  2247. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  2248. ----------2A02-------------------------------
  2249. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  2250.     AH = 02h
  2251.     ???
  2252. Return: ???
  2253. ----------2A0300-----------------------------
  2254. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  2255.     AX = 0300h
  2256.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  2257.         must include the colon)
  2258. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  2259.     CF set if access via files only
  2260. Notes:    do not use direct disk accesses if this function returns CF set or the
  2261.       device is redirected (INT 21/AX=5F02h)
  2262.     may take some time to execute
  2263.     called by DOS kernel on INT 25 and INT 26
  2264. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  2265. ----------2A04-------------------------------
  2266. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  2267.     AH = 04h
  2268.     AL = error retry
  2269.         00h automatically retry request on errors 09h, 12h, and 21h
  2270.         01h no retry
  2271.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  2272. Return: AX = 0000h if successful
  2273.     AH = 01h on error
  2274.         AL = error code
  2275. Note:    invokes either INT 5B or INT 5C as appropriate
  2276. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  2277. ----------2A0500-----------------------------
  2278. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  2279.     AX = 0500h
  2280. Return: AX reserved
  2281.     BX = number of network names available
  2282.     CX = number of network control blocks available
  2283.     DX = number of network sessions available
  2284. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  2285. ----------2A06-------------------------------
  2286. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  2287.     AH = 06h
  2288.     AL = 01h set concatenation mode (all printer output put in one job)
  2289.          02h set truncation mode (default)
  2290.          printer open/close starts new print job
  2291.          03h flush printer output and start new print job
  2292. Return: CF set on error
  2293.         AX = error code
  2294.     CF clear if successful
  2295. Note:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  2296. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  2297. ----------2A2001-----------------------------
  2298. INT 2A - MS Networks or NETBIOS - ???
  2299.     AX = 2001h
  2300.     ???
  2301. Return: ???
  2302. Note:    intercepted by DESQview 2.x
  2303. ----------2A2002-----------------------------
  2304. INT 2A - NETWORK - ???
  2305.     AX = 2002h
  2306.     ???
  2307. Return: ???
  2308. Note:    called by MSDOS 3.30 APPEND
  2309. ----------2A2003-----------------------------
  2310. INT 2A - NETWORK - ???
  2311.     AX = 2003h
  2312.     ???
  2313. Return: ???
  2314. Note:    called by MSDOS 3.30 APPEND
  2315. ----------2A7802-----------------------------
  2316. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  2317.     AX = 7802h
  2318.     ES:DI -> 8-byte buffer to be filled
  2319. Return: AL = 00h if no user logged on to Extended Services
  2320.     AL <> 00h if user logged on to Extended Services
  2321.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  2322. ----------2A80-------------------------------
  2323. INT 2A - NETWORK - BEGIN DOS CRITICAL SECTION
  2324.     AH = 80h
  2325.     AL = critical section number (00h-0Fh)
  2326.         01h DOS kernel, SHARE.EXE
  2327.         apparently for maintaining the integrity of DOS/SHARE/NET
  2328.           data structures
  2329.         02h DOS kernel
  2330.         ensures that no multitasking occurs while DOS is calling an
  2331.           installable device driver
  2332.         05h DOS 4.x only IFSFUNC
  2333.         06h DOS 4.x only IFSFUNC
  2334.         08h ASSIGN.COM
  2335. Notes:    normally hooked to avoid interrupting a critical section, rather than
  2336.       called
  2337.     the handler should ensure that none of the critical sections are
  2338.       reentered, usually by suspending a task which attempts to reenter
  2339.       an active critical section
  2340.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  2341.       is patched.  DOS 3.1 through 3.31 contain a zero-terminated list of
  2342.       words beginning at offset 02C3h in the IBMDOS segment; each word
  2343.       contains the offset within the IBMDOS segment of a byte which must
  2344.       be changed from C3h to 50h to enable use of critical sections.
  2345. SeeAlso: AH=81h,AH=82h,AH=87h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2346. ----------2A81-------------------------------
  2347. INT 2A - NETWORK - END DOS CRITICAL SECTION
  2348.     AH = 81h
  2349.     AL = critical section number (00h-0Fh) (see AH=80h)
  2350. Notes:    normally hooked rather than called
  2351.     the handler should reawaken any tasks which were suspended due to an
  2352.       attempt to enter the specified critical section
  2353. SeeAlso: AH=80h,AH=82h,AH=87h
  2354. ----------2A82-------------------------------
  2355. INT 2A - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  2356.     AH = 82h
  2357. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  2358.       greater than 0Ch except 59h, and on process termination
  2359.     the handler should reawaken any tasks which were suspended due to an
  2360.       attempt to enter one of the critical sections 0 through 7
  2361. SeeAlso: AH=81h
  2362. ----------2A84-------------------------------
  2363. INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
  2364.     AH = 84h
  2365. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  2366.       loop
  2367. SeeAlso: INT 28
  2368. ----------2A87-------------------------------
  2369. INT 2A - PRINT??? - CRITICAL SECTION
  2370.     AH = 87h
  2371.     AL = start/end
  2372.         00h start
  2373.         01h end
  2374. Note:    called by PRINT.COM
  2375. SeeAlso: AH=80h,AH=81h
  2376. ----------2A89-------------------------------
  2377. INT 2A - Network - ???
  2378.     AH = 89h
  2379.     AL = ???  (ASSIGN uses 08h)
  2380.     ???
  2381. Return: ???
  2382. ----------2A90-------------------------------
  2383. INT 2A - IBM PC 3270 EMULATION PROGRAM - ???
  2384.     AH = 90h
  2385.     ???
  2386. Return: ???
  2387. ----------2AC2-------------------------------
  2388. INT 2A - Network - ???
  2389.     AH = C2h
  2390.     AL = subfunction
  2391.         07h ???
  2392.         08h ???
  2393.     BX = 0001h
  2394.     ???
  2395. Return: ???
  2396. Note:    called by DOS 3.30 APPEND
  2397. ----------2B---------------------------------
  2398. INT 2B - DOS 2+ - RESERVED
  2399. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2400. ----------2C---------------------------------
  2401. INT 2C - DOS 2+ - RESERVED
  2402. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2403. ----------2C---------------------------------
  2404. INT 2C - STARLITE architecture - KERNEL API
  2405. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  2406.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  2407.       be released in 1991.    The interrupt number is subject to change
  2408.       before the actual release.
  2409. ----------2D---------------------------------
  2410. INT 2D - DOS 2+ - RESERVED
  2411. Note:    this vector is not used in DOS versions <= 5.00, and points at an IRET
  2412. ----------2D---------------------------------
  2413. INT 2D - [proposed (v3.2.1)] - ALTERNATE MULTIPLEX INTERRUPT
  2414.     AH = multiplex number
  2415.     AL = function
  2416.         00h installation check
  2417.         Return: AL = FFh if multiplex number in use
  2418.                 CX = version number (CH = major, CL = minor)
  2419.                 DX:DI -> signature string (see below) identifying
  2420.                     the program using the multiplex number
  2421.             AL = 00h if free
  2422.         01h get entry point
  2423.         Return: AL = FFh if entry point supported
  2424.                 DX:BX -> entry point for bypassing interrupt chain
  2425.             AL = 00h if all API calls via INT 2D
  2426.         02h uninstall
  2427.         Return: AL = status
  2428.                 00h not implemented
  2429.                 01h unsuccessful
  2430.                 02h can not uninstall yet, will do so when able
  2431.                 FFh successful (if handler ever returns from call)
  2432.         03h request pop-up
  2433.         Return: AL = status
  2434.                 00h not implemented or TSR is not a pop-up
  2435.                 01h can not pop up at this time, try again later
  2436.                 02h can not pop up yet, will do so when able
  2437.                 03h already popped up
  2438.                 04h unable to pop up, user intervention required
  2439.                     BX = standard reason code
  2440.                     0000h unknown failure 
  2441.                     0001h interrupt chain passes through memory
  2442.                           which must be swapped out to pop up
  2443.                     0002h swap-in failed
  2444.                 CX = application's reason code if nonzero
  2445.                 FFh TSR popped up and was exited by user
  2446.                 BX = return value
  2447.                     0000h no return value
  2448.                     0001h TSR unloaded
  2449.                     0002h-00FFh reserved
  2450.                     0100h-FFFFh application-dependent
  2451.         04h-0Fh reserved for future enhancements
  2452.         Return: AL = 00h (not implemented)
  2453.         other  application-dependent
  2454. Notes:    programs should not use fixed multiplex numbers; rather, a program
  2455.       should scan all multiplex numbers from 00h to FFh, remembering the
  2456.       first unused multiplex in case the program is not yet installed.
  2457.       For multiplex numbers which are in use, the program should compare
  2458.       the first 16 bytes of the signature string to determine whether it
  2459.       is already installed on that multiplex number.  If not previously
  2460.       installed, it should use the first free multiplex number.
  2461.     functions other than 00h are not valid unless a program is installed
  2462.       on the selected multiplex number
  2463.     the signature string and description may be used by memory mappers
  2464.       to display the installed programs
  2465.     users of this proposal should adhere to the IBM interrupt sharing
  2466.       protocol (see below), which will permit removal of TSRs in
  2467.       arbitrary order and interrupt handler reordering.  All TSRs
  2468.       following this proposal should be removable, though they need not
  2469.       keep the code for removing themselves resident; it is acceptable
  2470.       for a separate program to perform the removal.
  2471.     the interrupt number is tentative and may need to be changed before
  2472.       this proposal is finalized
  2473.     Please let me know if you choose to follow this proposal.  A list of
  2474.       the private API calls you use would be appreciated, as well.
  2475. SeeAlso: INT 2F
  2476.  
  2477. Format of signature string:
  2478. Offset    Size    Description
  2479.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  2480.  08h  8 BYTEs    blank-padded product name
  2481.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  2482. Note:    it is not necessary to reserve a full 64 bytes for the description,
  2483.       just enough to store the actual ASCIZ string
  2484.  
  2485. Format of interrupt sharing protocol interrupt handler entry point:
  2486. Offset    Size    Description
  2487.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  2488.         following this data block
  2489.  02h    DWORD    address of next handler in chain
  2490.  06h    WORD    signature 424Bh
  2491.  08h    BYTE    EOI flag
  2492.         00h software interrupt or secondary hardware interrupt handler
  2493.         80h primary hardware interrupt handler (will issue EOI)
  2494.  09h  2 BYTEs    short jump to hardware reset routine
  2495.         must point at a valid FAR procedure (may be just RETF)
  2496.  0Bh  7 BYTEs    reserved (0)
  2497.  
  2498. Signatures known to be in use:
  2499.  'TifaWARE' 'RECALL  '    George A. Theall's public domain commandline editor
  2500.             and history TSR (v1.2+)
  2501.         'EATMEM  '    restrict available memory for testing programs (v1.1+)
  2502. ----------2E---------------------------------
  2503. INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2504.     DS:SI -> commandline to execute (see below)
  2505. Return: all registers except CS:IP destroyed
  2506.     AX = status (4DOS v4.0)
  2507.        0000h successful
  2508.        FFFFh error before processing command (not enough memory, etc)
  2509.        other error number returned by command
  2510. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2511.       internal commands) without loading another copy of COMMAND.COM
  2512.     if COMMAND.COM is the user's command interpreter, the primary copy
  2513.       executes the command; this allows the master environment to be
  2514.       modified by issuing a "SET" command, but changes in the master
  2515.       environment will not become effective until all programs descended
  2516.       from the primary COMMAND.COM terminate
  2517.     since COMMAND.COM processes the string as if typed from the keyboard,
  2518.       the transient portion needs to be present, and the calling program
  2519.       must ensure that sufficient memory to load the transient portion can
  2520.       be allocated by DOS if necessary
  2521.     results are unpredictable if invoked by a program run from a batch file
  2522.       because this call is not reentrant and COMMAND.COM uses the same
  2523.       internal variables when processing a batch file
  2524.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2525.       has been loaded
  2526.  
  2527. Format of commandline:
  2528. Offset    Size    Description
  2529.  00h    BYTE    length of command string, not counting trailing CR
  2530.  01h    var    command string
  2531.   N    BYTE    0Dh (CR)
  2532. ----------2E----BXE22E-----------------------
  2533. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2534.     BX = E22Eh
  2535.     DS:SI -> zero byte
  2536. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2537. ----------2F---------------------------------
  2538. INT 2F - Multiplex - NOTES
  2539.     AH = identifier of program which is to handle the interrupt
  2540.        00h-7Fh reserved for DOS
  2541.        C0h-FFh reserved for applications
  2542.     AL is the function code
  2543.    This is a general mechanism for verifying the presence of a TSR and 
  2544.    communicating with it.  When searching for a free identifier code for AH
  2545.    using the installation check (AL=00h), the calling program should set
  2546.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2547.    and SS:SP to be valid on return, since numerous programs now use additional
  2548.    registers on input and/or output for the installation check.
  2549. Note:    Since the multiplex chain is growing so long, and beginning to
  2550.       experience multiplex number collisions, I am proposing an alternate
  2551.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2552.       multiplex, please let me know.
  2553. SeeAlso: INT 2D
  2554. ----------2F---------------------------------
  2555. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  2556.     AH = xx (dynamically assigned based upon a search for a multiplex
  2557.          number which doesn't answer installed)
  2558.     AL = 00h installation check
  2559.     ES:DI = EBEBh:BEBEh
  2560. Return: AL = 00h not installed
  2561.          01h not installed, not OK to install
  2562.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2563.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2564.          short form of the manufacturer's name, PPPPPPPP is a product
  2565.          name and NNNN is the product's version number
  2566. ----------2F---------------------------------
  2567. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2568.     AH = programmer-selected multiplex number
  2569.     AL = function
  2570.         00h installation check
  2571.         Return: AL = FFh if installed
  2572.         01h get TSR interrupt vectors
  2573.         Return: DX:AX -> vector table (see below)
  2574.         02h get TSR code segment
  2575.         Return: AX = code segment for all interrupt handlers
  2576.         03h call user exit routine and release TSR's memory
  2577.         04h get signature string
  2578.         Return: DX:AX -> counted string containing signature
  2579.         05h get TSR's INT 2F handler
  2580.         Return: DX:AX -> INT 2F handler
  2581.         06h enable/disable TSR
  2582.         BL = new state (00h disabled, 01h enabled)
  2583.         07h activate TSR (popup if not disabled)
  2584.         08h get hotkeys
  2585.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2586.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2587.         09h set hotkey
  2588.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2589.         CX = new hotkey (CH = keyflags, CL = scancode)
  2590.         0Ah-1Fh reserved
  2591.  
  2592. Format of vector table entry:
  2593. Offset    Size    Description
  2594.  00h    BYTE    vector number (00h = end of table)
  2595.  01h    DWORD    original vector
  2596.  05h    WORD    offset of interrupt handler in TSR's code segment
  2597. ----------2F00-------------------------------
  2598. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  2599.     AH = 00h
  2600.     ???
  2601. Return: ???
  2602. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2603.     values in AH other than 00h or 01h cause PRINT to return the number of
  2604.       files in the queue in AH
  2605. SeeAlso: AH=01h
  2606. ----------2F0080-----------------------------
  2607. INT 2F - Multiplex - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  2608.     AX = 0080h
  2609. Return: after PRINT executes
  2610. ----------2F01-------------------------------
  2611. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  2612.     AH = 01h
  2613.     ???
  2614. Return: ???
  2615. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2616.     values in AH other than 00h or 01h cause PRINT to return the number of
  2617.       files in the queue in AH
  2618. SeeAlso: AH=00h
  2619. ----------2F0100-----------------------------
  2620. INT 2F - Multiplex - DOS 3+ PRINT.COM - INSTALLATION CHECK
  2621.     AX = 0100h
  2622. Return: AL = status
  2623.         00h not installed
  2624.         01h not installed, but not OK to install
  2625.         FFh installed
  2626. SeeAlso: AX=0101h
  2627. ----------2F0101-----------------------------
  2628. INT 2F - Multiplex - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  2629.     AX = 0101h
  2630.     DS:DX -> submit packet (see below)
  2631. Return: CF clear if successful
  2632.         AL = 01h added to queue
  2633.          9Eh now printing
  2634.     CF set on error
  2635.         AX = error code (see also INT 21/AH=59h)
  2636.         01h invalid function
  2637.         02h file not found
  2638.         03h path not found
  2639.         04h out of file handles
  2640.         05h access denied
  2641.         08h print queue full
  2642.         09h spooler busy
  2643.         0Ch name too long
  2644.         0Fh invalid drive
  2645. SeeAlso: AX=0102h
  2646.  
  2647. Format of submit packet:
  2648. Offset    Size    Description
  2649.  00h    BYTE    level (must be 00h)
  2650.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  2651. ----------2F0102-----------------------------
  2652. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  2653.     AX = 0102h
  2654.     DS:DX -> ASCIZ filename (wildcards allowed)
  2655. Return: CF clear if successful
  2656.     CF set on error
  2657.         AX = error code (see AX=0101h)
  2658. SeeAlso: AX=0101h,AX=0103h
  2659. ----------2F0103-----------------------------
  2660. INT 2F - Multiplex - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  2661.     AX = 0103h
  2662. Return: CF clear if successful
  2663.     CF set on error
  2664.         AX = error code (see AX=0101h)
  2665. SeeAlso: AX=0102h
  2666. ----------2F0104-----------------------------
  2667. INT 2F - Multiplex - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  2668.     AX = 0104h
  2669. Return: CF clear if successful
  2670.         DX = error count
  2671.         DS:SI -> print queue
  2672.     CF set on error
  2673.         AX = error code (see AX=0101h)
  2674. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  2675.       an empty filename; the first name is the file currently being printed
  2676.     printing is stopped until AX=0105h is called to prevent the queue
  2677.       from changing while the filenames are being read
  2678. SeeAlso: AX=0101h,AX=0105h
  2679. ----------2F0105-----------------------------
  2680. INT 2F - Multiplex - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  2681.     AX = 0105h
  2682. Return: CF clear if successful
  2683.     CF set on error
  2684.         AX = error code (see AX=0101h)
  2685. SeeAlso: AX=0104h
  2686. ----------2F0106-----------------------------
  2687. INT 2F - Multiplex - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  2688.     AX = 0106h
  2689. Return: CF set if files in print queue
  2690.         AX = error code 0008h (queue full)
  2691.         DS:SI -> device driver header
  2692.     CF clear if print queue empty
  2693.         AX = 0000h
  2694. Note:    documented for DOS 5+, but not documented for prior versions
  2695. SeeAlso: AX=0104h
  2696. ----------2F0200-----------------------------
  2697. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  2698.     AX = 0200h
  2699. Return: AL = FFh if installed
  2700. ----------2F0201-----------------------------
  2701. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2702.     AX = 0201h
  2703. Return: nothing???
  2704. Notes:    called by DOS 3.3+ PRINT.COM
  2705.     AX=0202h appears to be the opposite function
  2706. SeeAlso: AX=0202h
  2707. ----------2F0202-----------------------------
  2708. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2709.     AX = 0202h
  2710.     ???
  2711. Return: nothing???
  2712. Note:    called by DOS 3.3+ PRINT.COM
  2713. SeeAlso: AX=0201h
  2714. ----------2F0203-----------------------------
  2715. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2716.     AX = 0203h
  2717. Return: nothing???
  2718. Notes:    called by DOS 3.3+ PRINT.COM
  2719.     AX=0204h appears to be the opposite function
  2720. SeeAlso: AX=0204h
  2721. ----------2F0204-----------------------------
  2722. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2723.     AX = 0204h
  2724.     ???
  2725. Return: nothing???
  2726. Note:    called by DOS 3.3 PRINT.COM
  2727. ----------2F---------------------------------
  2728. INT 2F - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  2729.     AX = 02xxh
  2730.     ???
  2731. Return: ???
  2732. ----------2F0500-----------------------------
  2733. INT 2F - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  2734.     AX = 0500h
  2735. Return: AL = 00h not installed, OK to install
  2736.          01h not installed, can't install
  2737.          FFh installed
  2738. Note:    this set of functions allows a user program to partially or completely
  2739.       override the default critical error handler's message in COMMAND.COM
  2740. SeeAlso: AH=05h,INT 24
  2741. ----------2F05-------------------------------
  2742. INT 2F - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  2743.     AH = 05h
  2744. ---DOS 3.x---
  2745.     AL = extended error code (not zero)
  2746. ---DOS 4+ ---
  2747.     AL = error type
  2748.         01h DOS extended error code
  2749.         02h parameter error
  2750.     BX = error code
  2751. Return: CF clear if successful
  2752.         ES:DI -> ASCIZ error message (read-only)
  2753.         AL = ???
  2754.     CF set if error code can't be converted to string
  2755. Notes:    called at start of COMMAND.COM's default critical error handler if 
  2756.       installed by a user program, allowing partial or complete overriding
  2757.       of the default error message
  2758.     subfunction 02h called by many DOS 4 external programs
  2759. SeeAlso: AX=122Eh,INT 24
  2760. ----------2F0600-----------------------------
  2761. INT 2F - DOS v3.0+ ASSIGN - INSTALLATION CHECK
  2762.     AX = 0600h
  2763. Return: AL = status
  2764.         00h not installed
  2765.         01h not installed, but not OK to install
  2766.         FFh installed
  2767. Note:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  2768.       (see INT 21/AX=2152h)
  2769. SeeAlso: AX=0601h,INT 21/AX=2152h
  2770. ----------2F0601-----------------------------
  2771. INT 2F - DOS v3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  2772.     AX = 0601h
  2773. Return: ES = segment of ASSIGN work area and assignment table
  2774. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  2775.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  2776. SeeAlso: AX=0600h
  2777. ----------2F0800-----------------------------
  2778. INT 2F - Multiplex - DRIVER.SYS support - INSTALLATION CHECK
  2779.     AX = 0800h
  2780. Return:    AL = 00h not installed, OK to install
  2781.          01h not installed, not OK to install
  2782.          FFh installed
  2783. Note:    supported by DR-DOS 5.0
  2784. ----------2F0801-----------------------------
  2785. INT 2F - Multiplex - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  2786.     AX = 0801h
  2787.     DS:DI -> drive data table (see AX=0803h)
  2788. Notes:    moves down internal list of drive data tables, copying and modifying
  2789.       the drive description flags word for tables referencing same physical
  2790.       drive
  2791.     data table appended to chain of tables
  2792.     supported by DR-DOS 5.0
  2793. SeeAlso: AX=0803h
  2794. ----------2F0802-----------------------------
  2795. INT 2F - Multiplex - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  2796.     AX = 0802h
  2797.     ES:BX -> device driver request header (see below)
  2798. Return: request header updated as per requested operation
  2799. Note:    supported by DR-DOS 5.0
  2800.  
  2801. Format of device driver request header:
  2802. Offset    Size    Description
  2803.  00h    BYTE    length of request header
  2804.  01h    BYTE    subunit within device driver
  2805.  02h    BYTE    command code (see below)
  2806.  03h    WORD    status (filled in by device driver)
  2807.         bit 15: error
  2808.         bits 14-11: reserved
  2809.         bit 10: ??? set by DOS kernel on entry to some driver calls
  2810.         bit 9: busy
  2811.         bit 8: done
  2812.         bits 7-0: error code if bit 15 set (see below)
  2813. ---DOS---
  2814.  05h  8 BYTEs    reserved (unused in DOS 2.x and 3.x)
  2815. ---STARLITE architecture---
  2816.  05h    DWORD    pointer to next request header
  2817.  09h  4 BYTEs    reserved
  2818. ---command code 00h---
  2819.  0Dh    BYTE    number of units (set by driver)
  2820.  0Eh    DWORD    address of first free byte following driver (set by driver)
  2821.  12h    DWORD    pointer to BPB array (set by block drivers only)
  2822.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  2823. ---command code 01h---
  2824.  0Dh    BYTE    media descriptor
  2825.  0Eh    BYTE    returned status
  2826.         00h don't know
  2827.         01h media has not changed
  2828.         FFh media has been changed
  2829.  0Fh    DWORD    (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in
  2830.           device header set and disk changed (set by driver)
  2831. ---command code 02h---
  2832.  0Dh    BYTE    media descriptor
  2833.  0Eh    DWORD    transfer address
  2834.         -> scratch sector if NON-IBM FORMAT bit in device header set
  2835.         -> first FAT sector otherwise
  2836.  12h    DWORD    pointer to BPB (set by driver)
  2837. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  2838.  0Dh    BYTE    media descriptor (block devices only)
  2839.  0Eh    DWORD    transfer address
  2840.  12h    WORD    byte count (character devices) or sector count (block devices)
  2841.  14h    WORD    starting sector number (block devices only)
  2842.  16h    DWORD    (DOS 3+) pointer to volume label if error 0Fh (set by driver)
  2843. ---command codes 04h,08h,09h---
  2844.  0Dh    BYTE    media descriptor (block devices only)
  2845.  0Eh    DWORD    transfer address
  2846.  12h    WORD    byte count (character devices) or sector count (block devices)
  2847.  14h    WORD    starting sector number (block devices only)
  2848.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  2849.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  2850.         device attribute word bit 1 set only) (see INT 21/AH=52h)
  2851. ---command code 05h---
  2852.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  2853. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh,85h,88h---
  2854.  no further fields
  2855. ---command code 10h---
  2856.  0Dh    BYTE    unused
  2857.  0Eh    DWORD    transfer address
  2858.  12h    WORD    byte count
  2859. ---command codes 13h,19h---
  2860.  0Dh    BYTE    category code
  2861.         00h unknown
  2862.         01h COMn:
  2863.         03h CON
  2864.         05h LPTn:
  2865.         08h disk
  2866.         9Eh (STARLITE) Media Access Control driver
  2867.  0Eh    BYTE    function code
  2868.         00h (STARLITE) MAC Bind request
  2869.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  2870.  11h    WORD    offset of device driver header
  2871.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  2872. ---command codes 80h,82h---
  2873.  0Dh    BYTE    addressing mode
  2874.         00h HSG (default)
  2875.         01h Phillips/Sony Red Book
  2876.  0Eh    DWORD    transfer address (ignored for command 82h)
  2877.  12h    WORD    number of sectors to read
  2878.         (if 0 for command 82h, request is an advisory seek)
  2879.  14h    DWORD    starting sector number
  2880.         logical sector number in HSG mode
  2881.         frame/second/minute/unused in Red Book mode
  2882.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  2883.  18h    BYTE    data read mode
  2884.         00h cooked (2048 bytes per frame)
  2885.         01h raw (2352 bytes per frame, including EDC/ECC)
  2886.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2887.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2888. ---command code 83h---
  2889.  0Dh    BYTE    addressing mode (see above)
  2890.  0Eh    DWORD    transfer address (ignored)
  2891.  12h    WORD    number of sectors to read (ignored)
  2892.  14h    DWORD    starting sector number (see also above)
  2893. ---command code 84h---
  2894.  0Dh    BYTE    addressing mode (see above)
  2895.  0Eh    DWORD    starting sector number (see also above)
  2896.  12h    DWORD    number of sectors to play
  2897. ---command codes 86h,87h---
  2898.  0Dh    BYTE    addressing mode (see above)
  2899.  0Eh    DWORD    transfer address (ignored in write mode 0)
  2900.  12h    WORD    number of sectors to write
  2901.  14h    DWORD    starting sector number (see also above)
  2902.  18h    BYTE    write mode
  2903.         00h mode 0 (write all zeros)
  2904.         01h mode 1 (default) (2048 bytes per sector)
  2905.         02h mode 2 form 1 (2048 bytes per sector)
  2906.         03h mode 2 form 2 (2336 bytes per sector)
  2907.  19h    BYTE    interleave size (number of sectors stored consecutively)
  2908.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  2909.  
  2910. Values for command code:
  2911.     00h INIT
  2912.     01h MEDIA CHECK (block devices)
  2913.     02h BUILD BPB (block devices)
  2914.     03h IOCTL INPUT
  2915.     04h INPUT
  2916.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  2917.     06h INPUT STATUS (character devices)
  2918.     07h INPUT FLUSH (character devices)
  2919.     08h OUTPUT
  2920.     09h OUTPUT WITH VERIFY
  2921.     0Ah OUTPUT STATUS (character devices)
  2922.     0Bh OUTPUT FLUSH (character devices)
  2923.     0Ch IOCTL OUTPUT
  2924.     0Dh (DOS 3+) DEVICE OPEN
  2925.     0Eh (DOS 3+) DEVICE CLOSE
  2926.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  2927.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  2928.     11h unused
  2929.     12h unused
  2930.     13h (DOS 3.2+) GENERIC IOCTL
  2931.     14h unused
  2932.     15h unused
  2933.     16h unused
  2934.     17h (DOS 3.2+) GET LOGICAL DEVICE
  2935.     18h (DOS 3.2+) SET LOGICAL DEVICE
  2936.     19h (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  2937.     80h (CD-ROM) READ LONG
  2938.     81h (CD-ROM) reserved
  2939.     82h (CD-ROM) READ LONG PREFETCH
  2940.     83h (CD-ROM) SEEK
  2941.     84h (CD-ROM) PLAY AUDIO
  2942.     85h (CD-ROM) STOP AUDIO
  2943.     86h (CD-ROM) WRITE LONG
  2944.     87h (CD-ROM) WRITE LONG VERIFY
  2945.     88h (CD-ROM) RESUME AUDIO
  2946.  
  2947. Values for error code:
  2948.     00h write-protect violation
  2949.     01h unknown unit
  2950.     02h drive not ready
  2951.     03h unknown command
  2952.     04h CRC error
  2953.     05h bad drive request structure length
  2954.     06h seek error
  2955.     07h unknown media
  2956.     08h sector not found
  2957.     09h printer out of paper
  2958.     0Ah write fault
  2959.     0Bh read fault
  2960.     0Ch general failure
  2961.     0Dh reserved
  2962.     0Eh (CD-ROM) media unavailable
  2963.     0Fh invalid disk change
  2964. ----------2F0803-----------------------------
  2965. INT 2F - Multiplex - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2966.     AX = 0803h
  2967. Return: DS:DI -> first drive data table in list
  2968. Note:    not available under DR-DOS 5.0
  2969. SeeAlso: AX=0801h
  2970.  
  2971. Format of DOS 3.30 drive data table:
  2972. Offset    Size    Description
  2973.  00h    DWORD    pointer to next table
  2974.  04h    BYTE    physical unit number (for INT 13)
  2975.  05h    BYTE    logical drive number
  2976.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2977.         Offset    Size    Description
  2978.          00h    WORD    bytes per sector
  2979.          02h    BYTE    sectors per cluster, FFh if unknown
  2980.          03h    WORD    number of reserved sectors
  2981.          05h    BYTE    number of FATs
  2982.          06h    WORD    number of root dir entries
  2983.          08h    WORD    total sectors
  2984.          0Ah    BYTE    media descriptor, 00h if unknown
  2985.          0Bh    WORD    sectors per FAT
  2986.          0Dh    WORD    sectors per track
  2987.          0Fh    WORD    number of heads
  2988.          11h    WORD    number of hidden sectors
  2989.  19h    BYTE    flags
  2990.         bit 6: 16-bit FAT instead of 12-bit FAT
  2991.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  2992.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2993.         fixed media)
  2994.  27h    BYTE    terminating null for volume label???
  2995.  28h    BYTE    device type (see INT 21/AX=440Dh)
  2996.  29h    WORD    bit flags describing drive
  2997.         bit 0: fixed media
  2998.         bit 1: door lock supported
  2999.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  3000.         bit 3: all sectors in a track are the same size
  3001.         bit 4: physical drive has multiple logical units
  3002.         bit 5: current logical drive for physical drive
  3003.         bit 6: ???
  3004.         bit 7: ???
  3005.         bit 8: ??? (related to disk change detection)
  3006.  2Bh    WORD    number of cylinders
  3007.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3008.  40h  3 BYTEs    ???
  3009.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3010.         (apparently only MSDOS 3.30 fixed media, nulls for removable
  3011.         media and PCDOS 3.30)
  3012.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3013. ---removable media---
  3014.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3015. ---fixed media---
  3016.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3017.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3018.         drive (always FFFFh if primary partition)
  3019.  
  3020. Format of COMPAQ DOS 3.31 drive data table:
  3021. Offset    Size    Description
  3022.  00h    DWORD    pointer to next table
  3023.  04h    BYTE    physical unit number (for INT 13)
  3024.  05h    BYTE    logical drive number
  3025.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.01 drive data table below)
  3026.  1Fh  6 BYTEs    ??? apparently always zeros
  3027.  25h    BYTE    flags
  3028.         bit 6: 16-bit FAT instead of 12-bit FAT
  3029.             5: large volume???
  3030.  26h    WORD    device-open count???
  3031.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3032.         fixed media)
  3033.  33h    BYTE    terminating null for volume label
  3034.  34h    BYTE    device type (see INT 21/AX=440Dh)
  3035.  35h    WORD    bit flags describing drive
  3036.  37h    WORD    number of cylinders
  3037.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3038.  52h  6 BYTEs    ??? apparently always zeros
  3039.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3040. ---removable media---
  3041.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3042. ---fixed media---
  3043.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3044.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3045.         drive (always FFFFh if primary partition)
  3046.  
  3047. Format of DOS 4.0-5.0 drive data table:
  3048. Offset    Size    Description
  3049.  00h    DWORD    pointer to next table
  3050.  04h    BYTE    physical unit number (for INT 13)
  3051.  05h    BYTE    logical drive number
  3052.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3053.         Offset    Size    Description
  3054.          00h    WORD    bytes per sector
  3055.          02h    BYTE    sectors per cluster, FFh if unknown
  3056.          03h    WORD    number of reserved sectors
  3057.          05h    BYTE    number of FATs
  3058.          06h    WORD    number of root dir entries
  3059.          08h    WORD    total sectors (see offset 15h if zero)
  3060.          0Ah    BYTE    media descriptor, 00h if unknown
  3061.          0Bh    WORD    sectors per FAT
  3062.          0Dh    WORD    sectors per track
  3063.          0Fh    WORD    number of heads
  3064.          11h    DWORD    number of hidden sectors
  3065.          15h    DWORD    total sectors if WORD at 08h is zero
  3066.  1Fh    BYTE    flags
  3067.         bit 6: 16-bit FAT instead of 12-bit
  3068.  20h  2 BYTEs    ???
  3069.  22h    BYTE    device type (see INT 21/AX=440Dh)
  3070.  23h    WORD    bit flags describing drive
  3071.         bit 0: fixed media
  3072.         bit 1: door lock supported
  3073.         bit 2: ???
  3074.         bit 3: all sectors in a track are the same size
  3075.         bit 4: physical drive has multiple logical units
  3076.         bit 5: current logical drive for physical drive
  3077.         bit 6: ???
  3078.         bit 7: ???
  3079.         bit 8: ???
  3080.  25h    WORD    number of cylinders
  3081.  27h 25 BYTEs    BIOS Parameter Block for highest capacity supported
  3082.  40h  7 BYTEs    ???
  3083. ---removable media---
  3084.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3085. ---fixed media, DOS 4.x---
  3086.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3087.  49h    WORD    absolute cylinder number of partition's start on phys drive
  3088.         (FFFFh if primary partition)
  3089. ---fixed media, DOS 5.0---
  3090.  47h    WORD    ??? apparently always 0001h
  3091.  49h    WORD    absolute cylinder number of partition's start on phys drive
  3092. ------
  3093.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3094.         extended boot record rather than root directory)
  3095.  56h    BYTE    terminating null for volume label???
  3096.  57h    DWORD    serial number
  3097.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3098.  63h    BYTE    terminating null for filesystem type???
  3099. ----------2F1000-----------------------------
  3100. INT 2F - Multiplex - SHARE - INSTALLATION CHECK
  3101.     AX = 1000h
  3102. Return: AL = 00h  not installed, OK to install
  3103.          01h  not installed, not OK to install
  3104.          FFh  installed
  3105. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3106.       (08E9: OR  AL,AL
  3107.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3108.     values of AL other than described here put PCDOS 4.00 into the same
  3109.       loop (the buggy instructions are the same)
  3110. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3111.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3112.       inactive state (due to the undocumented /NC flag used by the autoload
  3113.       code) until this call is made
  3114.     DOS 5.0 chains to the previous handler if AL <> 00h on entry
  3115. SeeAlso: AX=1080h,INT 21/AH=52h
  3116. ----------2F1040-----------------------------
  3117. INT 2F - Multiplex - DOS 4 only SHARE internal - ???
  3118.     AX = 1040h
  3119.     ???
  3120. Return: AL = FFh???
  3121. SeeAlso: AX=1000h
  3122. ----------2F1080-----------------------------
  3123. INT 2F - Multiplex - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3124.     AX = 1080h
  3125. Return: AL = status
  3126.         F0h successful
  3127.         FFh checking was already on
  3128. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3129.       and file sharing checks.  The undocumented commandline flag /NC can
  3130.       be used to disable the sharing code.
  3131. SeeAlso: AX=1000h,AX=1081h
  3132. ----------2F1081-----------------------------
  3133. INT 2F - Multiplex - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3134.     AX = 1081h
  3135. Return: AL = status
  3136.         F0h successful
  3137.         FFh checking was already off
  3138. Note:    (see AX=1080h)
  3139. SeeAlso: AX=1000h,AX=1080h
  3140. ----------2F10FF-----------------------------
  3141. INT 2F - Multiplex - DR-DOS 5.0 - ???
  3142.     AX = 10FFh
  3143.     ES:BX -> ???
  3144. Note:    sets pointer in kernel
  3145. ----------2F1100-----------------------------
  3146. INT 2F - Multiplex - NETWORK REDIRECTOR - INSTALLATION CHECK
  3147.     AX = 1100h
  3148. Return: AL = 00h  not installed, OK to install
  3149.          01h  not installed, not OK to install
  3150.          FFh  installed
  3151. Notes:    called by DOS 3.1+ kernel
  3152.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3153.       PC LAN Program redirector; DOS 5.0 moves the calls back into the
  3154.       redirector
  3155. ----------2F1100-----------------------------
  3156. INT 2F - Multiplex - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3157.     AX = 1100h
  3158.     STACK: WORD DADAh
  3159. Return: AL = 00h not installed, OK to install
  3160.         STACK unchanged
  3161.        = 01h not installed, not OK to install
  3162.         STACK unchanged
  3163.        = FFh installed
  3164.         STACK: WORD ADADh
  3165. ----------2F1101-----------------------------
  3166. INT 2F - Multiplex - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3167.     AX = 1101h
  3168.     SS = DOS DS
  3169.     SDA first filename pointer -> fully-qualified directory name
  3170.     SDA CDS pointer -> current directory structure for drive with dir
  3171. Return: CF set on error
  3172.         AX = DOS error code (see INT 21/AH=59h)
  3173.     CF clear if successful
  3174. Note:    called by DOS 3.1+ kernel
  3175. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3176. ----------2F1102-----------------------------
  3177. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - REMOVE REMOTE DIRECTORY
  3178.     AX = 1102h
  3179.     SS = DOS DS
  3180.     SDA first filename pointer -> fully-qualified directory name
  3181.     SDA CDS pointer -> current directory structure for drive with dir
  3182. Return: CF set on error
  3183.         AX = DOS error code (see INT 21/AH=59h)
  3184.     CF clear if successful
  3185. Note:    appears to be identical to AX=1101h
  3186. SeeAlso: AX=1101h
  3187. ----------2F1103-----------------------------
  3188. INT 2F - Multiplex - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3189.     AX = 1103h
  3190.     SS = DOS DS
  3191.     SDA first filename pointer -> fully-qualified directory name
  3192.     SDA CDS pointer -> current directory structure for drive with dir
  3193. Return: CF set on error
  3194.         AX = DOS error code (see INT 21/AH=59h)
  3195.     CF clear if successful
  3196. Note:    called by DOS 3.1+ kernel
  3197. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3198. ----------2F1104-----------------------------
  3199. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - MAKE REMOTE DIRECTORY
  3200.     AX = 1104h
  3201.     SS = DOS DS
  3202.     SDA first filename pointer -> fully-qualified directory name
  3203.     SDA CDS pointer -> current directory structure for drive with dir
  3204. Return: CF set on error
  3205.         AX = DOS error code (see INT 21/AH=59h)
  3206.     CF clear if successful
  3207. Note:    appears to be identical to AX=1103h
  3208. SeeAlso: AX=1103h
  3209. ----------2F1105-----------------------------
  3210. INT 2F - Multiplex - NETWORK REDIRECTOR - CHDIR
  3211.     AX = 1105h
  3212.     SS = DOS DS
  3213.     SDA first filename pointer -> fully-qualified directory name
  3214.     SDA CDS pointer -> current directory structure for drive with dir
  3215. Return: CF set on error
  3216.         AX = DOS error code (see INT 21/AH=59h)
  3217.     CF clear if successful
  3218.         CDS updated with new path
  3219. Notes:    called by DOS 3.1+ kernel
  3220.     directory string in CDS should not have a terminating backslash unless
  3221.       the current directory is the root
  3222. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3223. ----------2F1106-----------------------------
  3224. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3225.     AX = 1106h
  3226.     ES:DI -> SFT
  3227.         SFT DPB field -> DPB of drive containing file
  3228. Return: CF set on error
  3229.         AX = DOS error code (see INT 21/AH=59h)
  3230.     CF clear if successful
  3231.         SFT updated (except handle count, which DOS manages itself)
  3232. Note:    called by DOS 3.1+ kernel
  3233. SeeAlso: AX=1201h,AX=1227h,INT 21/AH=3Eh
  3234. ----------2F1107-----------------------------
  3235. INT 2F - Multiplex - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3236.     AX = 1107h
  3237.     ES:DI -> SFT
  3238.         SFT DPB field -> DPB of drive containing file
  3239. Return: CF set on error
  3240.         AX = DOS error code (see INT 21/AH=59h)
  3241.     CF clear if successful
  3242.         all buffers for file flushed
  3243.         directory entry updated
  3244. Note:    called by DOS 3.1+ kernel
  3245. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3246. ----------2F1108-----------------------------
  3247. INT 2F - Multiplex - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3248.     AX = 1108h
  3249.     ES:DI -> SFT
  3250.         SFT DPB field -> DPB of drive containing file
  3251.     CX = number of bytes
  3252.     SS = DOS DS
  3253.     SDA DTA field -> user buffer
  3254. Return: CF set on error
  3255.         AX = DOS error code (see INT 21/AH=59h)
  3256.     CF clear if successful
  3257.         CX = number of bytes read (0000h = end of file)
  3258.         SFT updated
  3259. Note:    called by DOS 3.1+ kernel
  3260. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  3261. ----------2F1109-----------------------------
  3262. INT 2F - Multiplex - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3263.     AX = 1109h
  3264.     ES:DI -> SFT
  3265.         SFT DPB field -> DPB of drive containing file
  3266.     CX = number of bytes
  3267.     SS = DOS DS
  3268.     SDA DTA field -> user buffer
  3269. Return: CF set on error
  3270.         AX = DOS error code (see INT 21/AH=59h)
  3271.     CF clear if successful
  3272.         CX = number of bytes written
  3273.         SFT updated
  3274. Note:    called by DOS 3.1+ kernel
  3275. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3276. ----------2F110A-----------------------------
  3277. INT 2F - Multiplex - NETWORK REDIRECTOR - LOCK REGION OF FILE
  3278.     AX = 110Ah
  3279.     BX = file handle
  3280.     CX:DX = starting offset
  3281.     SI = high word of size
  3282.     STACK: WORD low word of size
  3283.     ES:DI -> SFT
  3284.         SFT DPB field -> DPB of drive containing file
  3285.     SS = DOS DS
  3286. Return: CF set on error
  3287.        AL = DOS error code (see INT 21/AH=59h)
  3288.     STACK unchanged
  3289. Notes:    called by DOS 3.1+ kernel
  3290.     the redirector is expected to resolve lock conflicts
  3291. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  3292. ----------2F110B-----------------------------
  3293. INT 2F - Multiplex - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  3294.     AX = 110Bh
  3295.     BX = file handle
  3296.     CX:DX = starting offset
  3297.     SI = high word of size
  3298.     STACK: WORD low word of size
  3299.     ES:DI -> SFT for file
  3300.         SFT DPB field -> DPB of drive containing file
  3301. Return: CF set on error
  3302.        AL = DOS error code (see INT 21/AH=59h)
  3303.     STACK unchanged
  3304. Note:    called by DOS 3.x kernel; DOS 4.0+ calls AX=110Ah instead
  3305. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  3306. ----------2F110C-----------------------------
  3307. INT 2F - Multiplex - NETWORK REDIRECTOR - GET DISK SPACE
  3308.     AX = 110Ch
  3309.     ES:DI -> current directory structure for desired drive
  3310. Return: AL = sectors per cluster
  3311.     AH = media ID byte
  3312.     BX = total clusters
  3313.     CX = bytes per sector
  3314.     DX = number of available clusters
  3315. Note:    called by DOS 3.1+ kernel
  3316. SeeAlso: INT 21/AH=36h
  3317. ----------2F110D-----------------------------
  3318. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3319.     AX = 110Dh
  3320.     SDA first filename pointer -> name of file
  3321.     ???
  3322. Return: ???
  3323. Note:    appears to be similar to AX=110Fh
  3324. SeeAlso: AX=110Fh
  3325. ----------2F110E-----------------------------
  3326. INT 2F - Multiplex - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  3327.     AX = 110Eh
  3328.     SS = DOS DS
  3329.     SDA first filename pointer -> fully-qualified name of file
  3330.     SDA CDS pointer -> current directory structure for drive with file
  3331.     STACK: WORD new file attributes
  3332. Return: CF set on error
  3333.         AX = DOS error code (see INT 21/AH=59h)
  3334.     CF clear if successful
  3335.     STACK unchanged
  3336. Note:    called by DOS 3.1+ kernel
  3337. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  3338. ----------2F110F-----------------------------
  3339. INT 2F - Multiplex - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  3340.     AX = 110Fh
  3341.     SS = DOS DS
  3342.     SDA first filename pointer -> fully-qualified name of file
  3343.     SDA CDS pointer -> current directory structure for drive with file
  3344. Return: CF set on error
  3345.         AX = DOS error code (see INT 21/AH=59h)
  3346.     CF clear if successful
  3347.         AX = file attributes
  3348.         BX:DI = file size
  3349. Note:    called by DOS 3.1+ kernel
  3350. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  3351. ----------2F1110-----------------------------
  3352. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3353.     AX = 1110h
  3354.     SDA first filename pointer -> name of file
  3355.     ???
  3356. Return: ???
  3357. Note:    appears to be similar to AX=110Eh
  3358. SeeAlso: AX=110Eh
  3359. ----------2F1111-----------------------------
  3360. INT 2F - Multiplex - NETWORK REDIRECTOR - RENAME REMOTE FILE
  3361.     AX = 1111h
  3362.     SS = DS = DOS DS
  3363.     SDA first filename pointer = offset of fully-qualified old name
  3364.     SDA second filename pointer = offset of fully-qualified new name
  3365.     SDA CDS pointer -> current directory structure for drive with file
  3366. Return: CF set on error
  3367.         AX = DOS error code (see INT 21/AH=59h)
  3368.     CF clear if successful
  3369. Note:    called by DOS 3.1+ kernel
  3370. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  3371. ----------2F1112-----------------------------
  3372. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3373.     AX = 1112h
  3374.     SS = DS = DOS DS
  3375.     SDA first filename pointer -> name of file
  3376.     ???
  3377. Return: ???
  3378. SeeAlso: AX=1111h
  3379. ----------2F1113-----------------------------
  3380. INT 2F - Multiplex - NETWORK REDIRECTOR - DELETE REMOTE FILE
  3381.     AX = 1113h
  3382.     SS = DS = DOS DS
  3383.     SDA first filename pointer -> fully-qualified filename in DOS DS
  3384.     SDA CDS pointer -> current directory structure for drive with file
  3385. Return: CF set on error
  3386.         AX = DOS error code (see INT 21/AH=59h)
  3387.     CF clear if successful
  3388. Notes:    called by DOS 3.1+ kernel
  3389.     the filespec may contain wildcards
  3390. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  3391. ----------2F1114-----------------------------
  3392. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3393.     AX = 1114h
  3394.     SDA first filename pointer -> name of file
  3395.     ???
  3396. Return: ???
  3397. SeeAlso: AX=1113h
  3398. ----------2F1115-----------------------------
  3399. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3400.     AX = 1115h
  3401.     SS = DOS DS
  3402.     ES:DI -> SFT ???
  3403.     ???
  3404. Return: ???
  3405. SeeAlso: AX=112Eh
  3406. ----------2F1116-----------------------------
  3407. INT 2F - Multiplex - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  3408.     AX = 1116h
  3409.     ES:DI -> uninitialized SFT
  3410.     SS = DOS DS
  3411.     SDA first filename pointer -> fully-qualified name of file to open
  3412.     STACK: WORD file open mode (see INT 21/AH=3Dh)
  3413. Return: CF set on error
  3414.         AX = DOS error code (see INT 21/AH=59h)
  3415.     CF clear if successful
  3416.         SFT filled (except handle count, which DOS manages itself)
  3417.     STACK unchanged
  3418. Note:    called by DOS 3.1+ kernel
  3419. SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h
  3420. ----------2F1117-----------------------------
  3421. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  3422.     AX = 1117h
  3423.     ES:DI -> uninitialized SFT
  3424.     SS = DOS DS
  3425.     SDA first filename pointer -> fully-qualified name of file to open
  3426.     SDA CDS pointer -> current directory structure for drive with file
  3427.     STACK: WORD file creation mode
  3428.             low byte = file attributes
  3429.             high byte = 00h normal create, 01h create new file
  3430. Return: CF set on error
  3431.         AX = DOS error code (see INT 21/AH=59h)
  3432.     CF clear if successful
  3433.         SFT filled (except handle count, which DOS manages itself)
  3434.     STACK unchanged
  3435. Note:    called by DOS 3.1+ kernel
  3436. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  3437. ----------2F1118-----------------------------
  3438. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  3439.     AX = 1118h
  3440.     ES:DI -> uninitialized SFT
  3441.     SS = DOS DS
  3442.     SDA first filename pointer -> fully-qualified name of file
  3443.     STACK: WORD file creation mode
  3444.             low byte = file attributes
  3445.             high byte = 00h normal create, 01h create new file
  3446. Return: ???
  3447.     STACK unchanged
  3448. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  3449.       SDA CDS pointer has offset FFFFh
  3450. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  3451. ----------2F1119-----------------------------
  3452. INT 2F - Multiplex - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  3453.     AX = 1119h
  3454.     SS = DS = DOS DS
  3455.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  3456.     SDA first filename pointer -> fully-qualified search template
  3457.     SDA search attribute = attribute mask for search
  3458. Return: CF set on error
  3459.         AX = DOS error code (see INT 21/AH=59h)
  3460.     CF clear if successful
  3461.         [DTA] = updated findfirst search data
  3462.             (bit 7 of first byte must be set)
  3463.         [DTA+15h] = standard directory entry for file
  3464. Notes:    called by DOS 3.1+ kernel
  3465.     DOS 4.x IFSFUNC returns CF set, AX=0003h    
  3466. ----------2F111A-----------------------------
  3467. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3468.     AX = 111Ah
  3469.     ???
  3470. Return: CF set
  3471.         AX = error code (03h for DOS 4.01 IFSFUNC)
  3472. ----------2F111B-----------------------------
  3473. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDFIRST
  3474.     AX = 111Bh
  3475.     SS = DS = DOS DS
  3476.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  3477.     SDA first filename pointer -> fully-qualified search template
  3478.     SDA CDS pointer -> current directory structure for drive with file
  3479.     SDA search attribute = attribute mask for search
  3480. Return: CF set on error
  3481.         AX = DOS error code (see INT 21/AH=59h)
  3482.     CF clear if successful
  3483.         [DTA] = updated findfirst search data
  3484.             (bit 7 of first byte must be set)
  3485.         [DTA+15h] = standard directory entry for file
  3486. Note:    called by DOS 3.1+ kernel
  3487. SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  3488. ----------2F111C-----------------------------
  3489. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDNEXT
  3490.     AX = 111Ch
  3491.     SS = DS = DOS DS
  3492.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  3493. Return: CF set on error
  3494.         AX = DOS error code (see INT 21/AH=59h)
  3495.     CF clear if successful
  3496.         [DTA] = updated findfirst search data
  3497.             (bit 7 of first byte must be set)
  3498.         [DTA+15h] = standard directory entry for file
  3499. Note:    called by DOS 3.1+ kernel
  3500. SeeAlso: AX=111Bh,INT 21/AH=4Fh
  3501. ----------2F111D-----------------------------
  3502. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  3503.     AX = 111Dh
  3504.     DS???
  3505.     SS = DOS DS
  3506. Return: ???
  3507. Notes:    called by DOS 3.1+ kernel
  3508.     closes all FCBs opened by process
  3509. ----------2F111E-----------------------------
  3510. INT 2F - Multiplex - NETWORK REDIRECTOR - DO REDIRECTION
  3511.     AX = 111Eh
  3512.     SS = DOS DS
  3513.     STACK: WORD function to execute
  3514.         5F00h  get redirection mode
  3515.             BL = type (03h printer, 04h disk)
  3516.             Return: BH = state (00h off, 01h on)
  3517.         5F01h  set redirection mode
  3518.             BL = type (03h printer, 04h disk)
  3519.             BH = state (00h off, 01h on)
  3520.         5F02h  get redirection list entry
  3521.             BX = redirection list index
  3522.             DS:SI -> 16-byte local device name buffer
  3523.             ES:DI -> 128-byte network name buffer
  3524.             Return: must set user's BX to device type and CX to
  3525.                 stored parameter value, using AX=1218h to get
  3526.                 stack frame address
  3527.         5F03h  redirect device
  3528.             BL = device type (see INT 21/AX=5F03h)
  3529.             CX = stored parameter value
  3530.             DS:SI -> ASCIZ source device name
  3531.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  3532.         5F04h  cancel redirection
  3533.             DS:SI -> ASCIZ device name or network path
  3534.         5F05h  get redirection list extended entry
  3535.             BX = redirection list index
  3536.             DS:SI -> buffer for ASCIZ source device name
  3537.             ES:DI -> buffer for destination ASCIZ network path
  3538.             Return: BH = status flag
  3539.                 BL = type (03h printer, 04h disk)
  3540.                 CX = stored parameter value
  3541.                 BP = NETBIOS local session number
  3542.         5F06h  similar to 5F05h???
  3543. Return: CF set on error
  3544.         AX = error code (see INT 21/AH=59h)
  3545.     STACK unchanged
  3546. Note:    called by DOS 3.1+ kernel
  3547. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  3548. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  3549. ----------2F111F-----------------------------
  3550. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER SETUP
  3551.     AX = 111Fh
  3552.     STACK: WORD function
  3553.         5E02h  set printer setup
  3554.         5E03h  get printer setup
  3555.         5E04h  set printer mode
  3556.         5E05h  get printer mode
  3557. Return: CF set on error
  3558.         AX = error code (see INT 21/AH=59h)
  3559.     STACK unchanged
  3560. Note:    called by DOS 3.1+ kernel
  3561. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  3562. ----------2F1120-----------------------------
  3563. INT 2F - Multiplex - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  3564.     AX = 1120h
  3565.     DS = DOS DS
  3566.     ???
  3567. Return: CF clear (successful)
  3568. Notes:    called by DOS 3.1+ kernel
  3569.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  3570. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  3571. ----------2F1121-----------------------------
  3572. INT 2F - Multiplex - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  3573.     AX = 1121h
  3574.     CX:DX = offset (in bytes) from end
  3575.     ES:DI -> SFT
  3576.         SFT DPB field -> DPB of drive with file
  3577.     SS = DOS DS
  3578. Return: CF set on error
  3579.         AL = DOS error code (see INT 21/AH=59h)
  3580.     CF clear if successful
  3581.         DX:AX = new file position
  3582. Note:    called by DOS 3.1+ kernel
  3583. SeeAlso: AX=1228h,INT 21/AH=42h
  3584. ----------2F1122-----------------------------
  3585. INT 2F - Multiplex - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  3586.     AX = 1122h
  3587.     SS = DOS DS
  3588.     ???
  3589. Return: ???
  3590. Note:    called by DOS 3.1+ kernel
  3591. ----------2F1123-----------------------------
  3592. INT 2F - Multiplex - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  3593.     AX = 1123h
  3594.     DS:SI -> ASCIZ filename to canonicalize
  3595.     ES:DI -> 128-byte buffer for qualified name
  3596. Return: CF set if not resolved
  3597. Notes:    called by MSDOS 3.1+ kernel, but not called by DRDOS 5.0 unless the
  3598.       filename matches the name of a character device
  3599.     called first when DOS attempts to resolve a filename (unless inside an
  3600.       AX=5D00h server call); if this fails, DOS resolves the name locally
  3601. SeeAlso: AX=1221h,INT 21/AH=60h
  3602. ----------2F1124-----------------------------
  3603. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER OFF???
  3604.     AX = 1124h
  3605.     ES:DI -> SFT
  3606.     SS = DOS DS
  3607.     ???
  3608. Return: CX = ???
  3609. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  3610. SeeAlso: AX=1126h
  3611. ----------2F1125-----------------------------
  3612. INT 2F - Multiplex - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  3613.     AX = 1125h
  3614.     STACK: WORD subfunction
  3615.         5D07h get print stream state
  3616.             Return: DL = current state
  3617.         5D08h set print stream state
  3618.             DL = new state
  3619.         5D09h finish print job
  3620. Return: CF set on error
  3621.         AX = error code (see INT 21/AH=59h)
  3622.     STACK unchanged
  3623. Note:    called by DOS 3.1+ kernel
  3624. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  3625. ----------2F1126-----------------------------
  3626. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER ON/OFF???
  3627.     AX = 1126h
  3628.     ES:DI -> SFT for file handle 4???
  3629.     SS = DOS DS???
  3630.     ???
  3631. Return: CF set on error
  3632. Notes:    called by DOS 3.1+ kernel
  3633.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  3634.       bit 11 of the device information word in the SFT set
  3635. SeeAlso: AX=1124h
  3636. ----------2F1127-----------------------------
  3637. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  3638.     AX = 1127h
  3639. Return: CF set
  3640.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3641. ----------2F1128-----------------------------
  3642. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  3643.     AX = 1128h
  3644. Return: CF set
  3645.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3646. ----------2F1129-----------------------------
  3647. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  3648.     AX = 1129h
  3649. Return: CF set
  3650.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  3651. ----------2F112A-----------------------------
  3652. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3653.     AX = 112Ah
  3654.     DS = DOS DS
  3655.     ???
  3656. Return: ???
  3657. Note:    does something to each IFS driver
  3658. ----------2F112B-----------------------------
  3659. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - GENERIC IOCTL???
  3660.     AX = 112Bh
  3661.     SS = DOS DS
  3662.     CX = function/category
  3663.     DS:DX -> parameter block
  3664.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  3665.     ???
  3666. Return: CF set on error
  3667.         AX = DOS error code (see INT 21/AH=59h)
  3668.     CF clear if successful
  3669. Note:    called by DOS 4.0 kernel
  3670. ----------2F112C-----------------------------
  3671. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3672.     AX = 112Ch
  3673.     SS = DOS DS
  3674.     SDA current SFT pointer -> SFT for file
  3675.     ???
  3676. Return: CF set on error
  3677. ----------2F112D-----------------------------
  3678. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3679.     AX = 112Dh
  3680.     BL = subfunction (value of AL on INT 21)
  3681.         04h truncate open file to zero length
  3682.         ES:DI -> SFT for file
  3683.         Return: CF clear
  3684.         else ???
  3685.         Return: CX = ??? (00h or 02h for DOS 4.01)
  3686.     ES:DI -> SFT
  3687.     SS = DOS DS
  3688. Return: DS = DOS DS
  3689. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  3690.       INT 21/AX=5704h
  3691. ----------2F112E-----------------------------
  3692. INT 2F - Multiplex - DOS 4+ - EXTENDED OPEN/CREATE FILE
  3693.     AX = 112Eh
  3694.     SS = DS = DOS DS
  3695.     ES:DI -> uninitialized SFT for file
  3696.     STACK: WORD file attribute for created/truncated file
  3697.             low byte = file attributes
  3698.             high byte = 00h normal create/open, 01h create new file
  3699.     SDA first filename pointer -> fully-qualified filename
  3700.     SDA extended file open action -> action code (see INT 21/AX=6C00h)
  3701.     SDA extended file open mode -> open mode for file (see INT 21/AX=6C00h)
  3702. Return: CF set on error
  3703.         AX = error code
  3704.     CF clear if successful
  3705.         CX = result code
  3706.         01h file opened
  3707.         02h file created
  3708.         03h file replaced (truncated)
  3709.         SFT initialized (except handle count, which DOS manages itself)
  3710. Note:    called by DOS 4.0 kernel
  3711. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  3712. ----------2F112F-----------------------------
  3713. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  3714.     AX = 112Fh
  3715.     SS = DOS DS
  3716.     STACK: WORD function in low byte
  3717.         00h ???
  3718.             DS:SI -> Current Directory Structure???
  3719.             CL = drive (1=A:)
  3720.         01h ???
  3721.             DS:SI -> ???
  3722.             CL = file handle???
  3723.         02h ???
  3724.             DS:SI -> Current Directory Structure???
  3725.             DI = ???
  3726.             CX = drive (1=A:)
  3727.     ???
  3728. Return: CF set on error
  3729.         AX = DOS error code (see INT 21/AH=59h)
  3730.     CF clear if successful
  3731. Note:    called by DOS 4.0 kernel
  3732. SeeAlso: INT 21/AH=6Bh
  3733. ----------2F1130-----------------------------
  3734. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - GET IFSFUNC SEGMENT
  3735.     AX = 1130h
  3736. Return: ES = CS of resident IFSFUNC
  3737. ----------2F1186-----------------------------
  3738. INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe
  3739.     AX = 1186h
  3740.     ???
  3741. Return: ???
  3742. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  3743.       file/printer services
  3744. SeeAlso: AX=118Fh,INT 21/AX=5F39h
  3745. ----------2F118A-----------------------------
  3746. INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  3747.     AX = 118Ah
  3748.     ???
  3749. Return: ???
  3750. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  3751. ----------2F118F-----------------------------
  3752. INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe
  3753.     AX = 118Fh
  3754.     ???
  3755. Return: ???
  3756. SeeAlso: AX=1186h,INT 21/AX=5F3Ah
  3757. ----------2F1200-----------------------------
  3758. INT 2F - Multiplex - DOS 3+ internal - INSTALLATION CHECK
  3759.     AX = 1200h
  3760. Return: AL = FFh (for compatibility with other INT 2F functions)
  3761. ----------2F1201-----------------------------
  3762. INT 2F - Multiplex - DOS 3+ internal - CLOSE CURRENT FILE
  3763.     AX = 1201h
  3764.     SS = DOS DS
  3765.     SDA current SFT pointer -> SFT of file to close
  3766. Return: CF set on error
  3767.     BX???
  3768.     CX new reference count of SFT
  3769.     ES:DI -> SFT for file
  3770. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3771. ----------2F1202-----------------------------
  3772. INT 2F - Multiplex - DOS 3+ internal - GET INTERRUPT ADDRESS
  3773.     AX = 1202h
  3774.     STACK: WORD vector number
  3775. Return: ES:BX -> interrupt vector
  3776.     STACK unchanged
  3777. ----------2F1203-----------------------------
  3778. INT 2F - Multiplex - DOS 3+ internal - GET DOS DATA SEGMENT
  3779.     AX = 1203h
  3780. Return: DS = segment of IBMDOS.COM/MSDOS.SYS
  3781. ----------2F1204-----------------------------
  3782. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  3783.     AX = 1204h
  3784.     STACK: WORD character to normalize
  3785. Return: AL = normalized character (forward slash turned to backslash, all
  3786.         others unchanged)
  3787.     ZF set if path separator
  3788.     STACK unchanged
  3789. ----------2F1205-----------------------------
  3790. INT 2F - Multiplex - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3791.     AX = 1205h
  3792.     STACK: WORD character to output
  3793. Return: STACK unchanged
  3794. Note:    can be called only from within DOS
  3795. ----------2F1206-----------------------------
  3796. INT 2F - Multiplex - DOS 3+ internal - INVOKE CRITICAL ERROR
  3797.     AX = 1206h
  3798.     DI = error code
  3799.     BP:SI -> device driver header
  3800.     SS = DOS DS
  3801.     STACK: WORD value to be passed to INT 24 in AX
  3802. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3803.     STACK unchanged
  3804. SeeAlso: INT 24
  3805. ----------2F1207-----------------------------
  3806. INT 2F - Multiplex - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3807.     AX = 1207h
  3808.     DS:DI -> disk buffer
  3809. Return: nothing
  3810. Notes:    can be called only from within DOS
  3811.     buffer is moved to end of buffer list (least-recently used is first)
  3812. SeeAlso: AX=120Fh
  3813. ----------2F1208-----------------------------
  3814. INT 2F - Multiplex - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  3815.     AX = 1208h
  3816.     ES:DI -> SFT
  3817. Return: AX = original value of reference count
  3818. Note:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  3819.       that the SFT is not in use).    It is the caller's responsibility to
  3820.       set the reference count to zero after cleaning up.
  3821. ----------2F1209-----------------------------
  3822. INT 2F - Multiplex - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  3823.     AX = 1209h
  3824.     DS:DI -> disk buffer
  3825. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3826. Note:    can be called only from within DOS
  3827. SeeAlso: AX=120Eh,AX=1215h
  3828. ----------2F120A-----------------------------
  3829. INT 2F - Multiplex - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3830.     AX = 120Ah
  3831.     DS = SS = DOS DS
  3832.     STACK: WORD extended error code
  3833. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3834.     CF clear if retry, set otherwise
  3835.     STACK unchanged
  3836. Notes:    can only be called during a DOS function call, as it uses various
  3837.       fields in the SDA to set up the registers for the INT 24
  3838.     reportedly sets current DPB's first root directory sector to 1
  3839. SeeAlso: INT 24
  3840. ----------2F120B-----------------------------
  3841. INT 2F - Multiplex - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  3842.     AX = 120Bh
  3843.     ES:DI -> system file table entry for previous open of file
  3844.     STACK: WORD extended error code (should be 20h--sharing violation)
  3845. Return: CF clear if operation should be retried
  3846.     CF set if operation should not be retried
  3847.         AX = error code (20h) (see AH=59h)
  3848.     STACK unchanged
  3849. Notes:    can only be called during a DOS function call
  3850.     should only be called if an attempt was made to open an already-open
  3851.       file contrary to the sharing rules
  3852.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  3853.       inheritance allowed
  3854. ----------2F120C-----------------------------
  3855. INT 2F - Multiplex - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???
  3856.     AX = 120Ch
  3857.     SDA current SFT pointer -> SFT for file
  3858.     DS = SS = DOS DS
  3859. Return: ES, DI, AX destroyed
  3860. Notes:    invoked "device open" call on device driver for SFT
  3861.     changes owner of last-accessed SFT to calling process if it was opened
  3862.       via FCB
  3863.     called by network redirectors
  3864. ----------2F120D-----------------------------
  3865. INT 2F - Multiplex - DOS 3+ internal - GET DATE AND TIME
  3866.     AX = 120Dh
  3867.     SS = DOS DS
  3868. Return: AX = current date in packed format (see INT 21/AX=5700h)
  3869.     DX = current time in packed format (see INT 21/AX=5700h)
  3870. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  3871. ----------2F120E-----------------------------
  3872. INT 2F - Multiplex - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  3873.     AX = 120Eh
  3874.     SS = DOS DS
  3875. Return: DS:DI -> first disk buffer
  3876. Note:    clears "referenced" flag on all disk buffers
  3877. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  3878. ----------2F120F-----------------------------
  3879. INT 2F - Multiplex - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  3880.     AX = 120Fh
  3881.     DS:DI -> disk buffer
  3882.     SS = DOS DS
  3883. Return: DS:DI -> next buffer in buffer list
  3884. Note:    indicated buffer moved to end of chain
  3885. SeeAlso: AX=1207h
  3886. ----------2F1210-----------------------------
  3887. INT 2F - Multiplex - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  3888.     AX = 1210h
  3889.     DS:DI -> first disk buffer to check
  3890. Return: ZF clear if found
  3891.         DS:DI -> first unreferenced disk buffer
  3892.     ZF set if not found
  3893. SeeAlso: AX=120Eh
  3894. ----------2F1211-----------------------------
  3895. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  3896.     AX = 1211h
  3897.     DS:SI -> ASCIZ filename to normalize
  3898.     ES:DI -> buffer for normalized filename
  3899. Return: destination buffer filled with uppercase filename, with slashes turned
  3900.     to backslashes
  3901. SeeAlso: AX=121Eh,AX=1221h
  3902. ----------2F1212-----------------------------
  3903. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3904.     AX = 1212h
  3905.     ES:DI -> ASCIZ string
  3906. Return: CX = length of string
  3907. SeeAlso: AX=1225h
  3908. ----------2F1213-----------------------------
  3909. INT 2F - Multiplex - DOS 3+ internal - UPPERCASE CHARACTER
  3910.     AX = 1213h
  3911.     STACK: WORD character to convert to uppercase
  3912. Return: AL = uppercase character
  3913.     STACK unchanged
  3914. ----------2F1214-----------------------------
  3915. INT 2F - Multiplex - DOS 3+ internal - COMPARE FAR POINTERS
  3916.     AX = 1214h
  3917.     DS:SI = first pointer
  3918.     ES:DI = second pointer
  3919. Return: ZF set if pointers are equal, ZF clear if not equal
  3920. ----------2F1215-----------------------------
  3921. INT 2F - Multiplex - DOS 3+ internal - FLUSH BUFFER
  3922.     AX = 1215h
  3923.     DS:DI -> disk buffer
  3924.     SS = DOS DS
  3925.     STACK: WORD drives for which to skip buffer
  3926.         ignore buffer if drive same as high byte, or bytes differ and
  3927.         the buffer is for a drive OTHER than that given in low byte
  3928. Return: STACK unchanged
  3929. Note:    can be called only from within DOS
  3930. SeeAlso: AX=1209h
  3931. ----------2F1216-----------------------------
  3932. INT 2F - Multiplex - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  3933.     AX = 1216h
  3934.     BX = system file table entry number
  3935. Return: CF clear if successful
  3936.         ES:DI -> system file table entry
  3937.     CF set if BX greater than FILES=
  3938. SeeAlso: AX=1220h
  3939. ----------2F1217-----------------------------
  3940. INT 2F - Multiplex - DOS 3+ internal - GET CURRENT DIRECTRY STRUCTURE FOR DRIVE
  3941.     AX = 1217h
  3942.     SS = DOS DS
  3943.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  3944. Return: CF set on error
  3945.         (drive > LASTDRIVE)
  3946.     CF clear if successful
  3947.         DS:SI -> current directory structure for specified drive
  3948.     STACK unchanged
  3949. SeeAlso: AX=1219h
  3950. ----------2F1218-----------------------------
  3951. INT 2F - Multiplex - DOS 3+ internal - GET CALLER'S REGISTERS
  3952.     AX = 1218h
  3953. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  3954. Note:    only valid while within DOS
  3955. ----------2F1219-----------------------------
  3956. INT 2F - Multiplex - DOS 3+ internal - SET DRIVE???
  3957.     AX = 1219h
  3958.     SS = DOS DS
  3959.     STACK: WORD drive (0 = default, 1 = A:, etc)
  3960. Return: ???
  3961.     STACK unchanged
  3962. Notes:    calls AX=1217h
  3963.     builds a current directory structure if inside server call
  3964.       (INT 21/AX=5D00h)
  3965. SeeAlso: AX=1217h,AX=121Fh
  3966. ----------2F121A-----------------------------
  3967. INT 2F - Multiplex - DOS 3+ internal - GET FILE'S DRIVE
  3968.     AX = 121Ah
  3969.     DS:SI -> filename
  3970. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  3971.     DS:SI -> filename without leading X: (if present)
  3972. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  3973. ----------2F121B-----------------------------
  3974. INT 2F - Multiplex - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  3975.     AX = 121Bh
  3976.     CL = year - 1980
  3977. Return: AL = number of days in February
  3978. Note:    requires DS to be set to the DOS code segment
  3979. SeeAlso: INT 21/AH=2Bh
  3980. ----------2F121C-----------------------------
  3981. INT 2F - Multiplex - DOS 3+ internal - CHECKSUM MEMORY
  3982.     AX = 121Ch
  3983.     DS:SI -> start of memory to checksum
  3984.     CX = number of bytes
  3985.     DX = initial checksum
  3986.     SS = DOS DS
  3987. Return: AX, CX destroyed
  3988.     DX = checksum
  3989.     DS:SI -> first byte after checksummed range
  3990. Note:    used by DOS to determine day count since 1/1/80 given a date
  3991. SeeAlso: AX=121Dh
  3992. ----------2F121D-----------------------------
  3993. INT 2F - Multiplex - DOS 3+ internal - SUM MEMORY
  3994.     AX = 121Dh
  3995.     DS:SI -> memory to add up
  3996.     CX = 0000h
  3997.     DX = limit
  3998. Return: AL = byte which exceeded limit
  3999.     CX = number of bytes before limit exceeded
  4000.     DX = remainder after adding first CX bytes
  4001.     DS:SI -> byte beyond the one which exceeded the limit
  4002. Note:    used by DOS to determine year or month given day count since 1/1/80
  4003. SeeAlso: AX=121Ch
  4004. ----------2F121E-----------------------------
  4005. INT 2F - Multiplex - DOS 3+ internal - COMPARE FILENAMES
  4006.     AX = 121Eh
  4007.     DS:SI -> first ASCIZ filename
  4008.     ES:DI -> second ASCIZ filename
  4009. Return: ZF set if filenames equivalent, ZF clear if not
  4010. SeeAlso: AX=1211h,AX=1221h
  4011. ----------2F121F-----------------------------
  4012. INT 2F - Multiplex - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4013.     AX = 121Fh
  4014.     SS = DOS DS
  4015.     STACK: WORD drive letter
  4016. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4017.     STACK unchanged
  4018. ----------2F1220-----------------------------
  4019. INT 2F - Multiplex - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  4020.     AX = 1220h
  4021.     BX = file handle
  4022. Return: CF set on error
  4023.         AL = 6 (invalid file handle)
  4024.     CF clear if successful
  4025.         ES:DI -> JFT entry for file handle in current process
  4026. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  4027.       file handle, or FFh if the handle is not open
  4028. SeeAlso: AX=1216h,AX=1229h
  4029. ----------2F1221-----------------------------
  4030. INT 2F - Multiplex - DOS 3+ internal - CANONICALIZE FILE NAME
  4031.     AX = 1221h
  4032.     DS:SI -> file name to be fully qualified
  4033.     ES:DI -> 128-byte buffer for resulting canonical file name
  4034.     SS = DOS DS
  4035. Return: (see INT 21/AH=60h)
  4036. Note:    identical to INT 21/AH=60h
  4037. SeeAlso: AX=1123h,INT 21/AH=60h
  4038. ----------2F1222-----------------------------
  4039. INT 2F - Multiplex - DOS 3+ internal - SET EXTENDED ERROR INFO
  4040.     AX = 1222h
  4041.     SS = DOS data segment
  4042.     SS:SI -> 4-byte records
  4043.         BYTE    error code, FFh = last record
  4044.         BYTE    error class, FFh = don't change
  4045.         BYTE    suggested action, FFh = don't change
  4046.         BYTE    error locus, FFh = don't change
  4047.     SDA error code set
  4048. Return: SI destroyed
  4049.     SDA error class, error locus, and suggested action fields set
  4050. Note:    can be called only from within DOS
  4051. SeeAlso: AX=122Dh,INT 21/AH=59h
  4052. ----------2F1223-----------------------------
  4053. INT 2F - Multiplex - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  4054.     AX = 1223h
  4055.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4056.     SDA+22Bh (DOS 4.0x) = eight-character blank-padded name
  4057. Return: CF set if no character device by that name found
  4058.     CF clear if found
  4059.         BH = low byte of device attribute word
  4060. Note:    can only be called from within DOS (assumes DS=SS=DOS DS)
  4061. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4062. ----------2F1224-----------------------------
  4063. INT 2F - Multiplex - DOS 3+ internal - DELAY
  4064.     AX = 1224h
  4065.     SS = DOS DS
  4066. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4067.       (INT 21/AX=5D00h)
  4068. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4069.       inside a server call
  4070. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h
  4071. ----------2F1225-----------------------------
  4072. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  4073.     AX = 1225h
  4074.     DS:SI -> ASCIZ string
  4075. Return: CX = length of string
  4076. SeeAlso: AX=1212h
  4077. ----------2F1226-----------------------------
  4078. INT 2F - Multiplex - DOS 3.3+ internal - OPEN FILE
  4079.     AX = 1226h
  4080.     CL = access mode
  4081.     DS:DX -> ASCIZ filename
  4082. Return: CF set on error
  4083.         AL = error code (see INT 21/AH=59h)
  4084.     CF clear if successful
  4085.         AX = file handle
  4086. Notes:    can only be called from within DOS (assumes SS=DOS DS)
  4087.     equivalent to INT 21/AH=3Dh    
  4088. SeeAlso: AX=1227h,INT 21/AH=3Dh
  4089. ----------2F1227-----------------------------
  4090. INT 2F - Multiplex - DOS 3.3+ internal - CLOSE FILE
  4091.     AX = 1227h
  4092.     BX = file handle
  4093. Return: CF set on error
  4094.         AL = 06h invalid file handle
  4095.     CF clear if successful
  4096. Notes:    can only be called from within DOS (assumes SS=DOS DS)
  4097.     equivalent to INT 21/AH=3Eh
  4098. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  4099. ----------2F1228BP4200-----------------------
  4100. INT 2F - Multiplex - DOS 3.3+ internal - MOVE FILE POINTER
  4101.     AX = 1228h
  4102.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  4103.     BX = file handle
  4104.     CX:DX = offset in bytes
  4105.     SS = DOS DS
  4106. Return: as for INT 21/AH=42h
  4107. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  4108.       function call
  4109.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4110.       LSEEK, and restores frame pointer
  4111. SeeAlso: INT 21/AH=42h
  4112. ----------2F1229-----------------------------
  4113. INT 2F - Multiplex - DOS 3.3+ internal - READ FROM FILE
  4114.     AX = 1229h
  4115.     BX = file handle
  4116.     CX = number of bytes to read
  4117.     DS:DX -> buffer
  4118.     SS = DOS DS
  4119. Return: as for INT 21/AH=3Fh
  4120. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  4121.       a DOS function call
  4122. SeeAlso: AX=1226h,INT 21/AH=3Fh
  4123. ----------2F122A-----------------------------
  4124. INT 2F - Multiplex - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  4125.     AX = 122Ah
  4126.     BX = entry point to set (0001h or 0002h)
  4127.     DS:SI -> FASTOPEN entry point
  4128.         (entry point not set if SI = FFFFh for DOS 4+)
  4129. Return: CF set if specified entry point already set
  4130. Notes:    entry point in BX is ignored under DOS 3.30
  4131.     both entry points set to same handler by DOS 4.01
  4132.  
  4133. DOS 3.30 FASTOPEN is called with:
  4134.     AL = 01h  ???
  4135.         CX = ??? seems to be offset
  4136.         DI = ??? seems to be offset
  4137.         SI = offset in DOS DS of filename
  4138.     AL = 02h  ???
  4139.     AL = 03h  open file???
  4140.         SI = offset in DOS DS of filename
  4141.     AL = 04h  ???
  4142.         AH = subfunction (00h,01h,02h)
  4143.         ES:DI -> ???
  4144.         CX = ??? (subfunctions 01h and 02h only)
  4145. Returns: CF set on error or not installed
  4146. Note: function 03h calls function 01h first
  4147.  
  4148. PCDOS 4.01 FASTOPEN is additionally called with:
  4149.     AL = 04h ???
  4150.         AH = 03h
  4151.         ???
  4152.     AL = 05h ???
  4153.     AL = 0Bh ???
  4154.     AL = 0Ch ???
  4155.     AL = 0Dh ???
  4156.     AL = 0Eh ???
  4157.     AL = 0Fh ???
  4158.     AL = 10h ???
  4159. ----------2F122B-----------------------------
  4160. INT 2F - Multiplex - DOS 3.3+ internal - IOCTL
  4161.     AX = 122Bh
  4162.     BP = 44xxh
  4163.     SS = DOS DS
  4164.     additional registers as appropriate for INT 21/AX=44xxh
  4165. Return: as for INT 21/AH=44h
  4166. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  4167.       a DOS function call
  4168.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  4169.       IOCTL, and restores frame pointer
  4170. SeeAlso: INT 21/AH=44h
  4171. ----------2F122C-----------------------------
  4172. INT 2F - Multiplex - DOS 3.3+ internal - GET DEVICE CHAIN
  4173.     AX = 122Ch
  4174. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  4175. SeeAlso: INT 21/AH=52h
  4176. ----------2F122D-----------------------------
  4177. INT 2F - Multiplex - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  4178.     AX = 122Dh
  4179. Return: AX = current extended error code
  4180. SeeAlso: AX=1222h,INT 21/AH=59h
  4181. ----------2F122E-----------------------------
  4182. INT 2F - Multiplex - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  4183.     AX = 122Eh
  4184.     DL = subfunction
  4185.         00h get standard DOS error table (errors 00h-12h,50h-5Bh)
  4186.         Return: ES:DI -> error table
  4187.         01h set standard DOS error table
  4188.         ES:DI -> error table
  4189.         02h get parameter error table (errors 00h-0Ah)
  4190.         Return: ES:DI -> error table
  4191.         03h set parameter error table
  4192.         ES:DI -> error table
  4193.         04h get critical/SHARE error table (errors 13h-2Bh)
  4194.         Return: ES:DI -> error table
  4195.         05h set critical/SHARE error table
  4196.         ES:DI -> error table
  4197.         06h get ??? error table
  4198.         Return: ES:DI -> error table or 0000h:0000h
  4199.         07h set ??? error table
  4200.         ES:DI -> error table
  4201.         08h get error message retriever (see below)
  4202.         Return: ES:DI -> FAR procedure to fetch error message 
  4203.         09h set ??? error table
  4204.         ES:DI -> error table
  4205. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  4206.       the offset of the error message table within COMMAND.COM, and the
  4207.       procedure returned by DL=08h should be called
  4208.     DOS 5.0 COMMAND.COM does not allow setting any of the addresses; they
  4209.       are always returned with segment 0001h
  4210. SeeAlso: AX=0500h,INT 21/AH=59h
  4211.  
  4212. Format of DOS 4.x error table:
  4213. Offset    Size    Description
  4214.  00h    BYTE    FFh
  4215.  01h  2 BYTEs    04h,00h (DOS version???)
  4216.  03h    BYTE    number of error headers following
  4217.  04h 2N WORDs    table of all error headers for table
  4218.         Offset    Size    Description
  4219.          00h    WORD    error message number
  4220.          02h    WORD    offset of error message from start of header
  4221.                 error messages are count byte followed by msg
  4222. Note:    DOS 5 error tables consist of one word per error number; each word
  4223.       contains either the offset of a counted string or 0000h
  4224.  
  4225. Call error retrieval function with:
  4226.     AX = error number
  4227.     DI = offset of error table
  4228. Return: ES:DI -> error message (counted string)
  4229. Notes:    this function needs to access COMMAND.COM if the messages were not
  4230.       loaded into memory permanently with /MSG; the caller should assume
  4231.       that the returned message will be overwritten by the next call of
  4232.       the function
  4233.     supported by DR-DOS 5.0
  4234. ----------2F122F-----------------------------
  4235. INT 2F - Multiplex - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN
  4236.     AX = 122Fh
  4237.     DX = DOS version number (0000h = return true DOS version)
  4238. Note:    not available under DR-DOS 5.0
  4239. SeeAlso: INT 21/AH=30h
  4240. ----------2F13-------------------------------
  4241. INT 2F - Multiplex - DOS 3.3+ - SET DISK INTERRUPT HANDLER
  4242.     AH = 13h
  4243.     DS:DX -> interrupt handler disk driver calls on read/write
  4244.     ES:BX = address to restore INT 13 to on system halt (exit from root
  4245.          shell) or warm boot (INT 19)
  4246. Return: DS:DX from previous invocation of this function
  4247.     ES:BX from previous invocation of this function
  4248. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  4249.       original INT 13 handler.  The first is for disk change detection
  4250.       on floppy drives, the second is for tracking formatting calls and
  4251.       correcting DMA boundary errors, the third is for working around
  4252.       problems in a particular version of IBM's ROM BIOS
  4253.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  4254.       also points there unless IO.SYS has installed a special filter for
  4255.       hard disk reads (on systems with model byte FCh and BIOS date
  4256.       "01/10/84" only), in which case it points at the special filter
  4257.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  4258.       functions are still invoked via an INT 13 instruction
  4259.     this is a dangerous security loophole for any virus-monitoring software
  4260.       which does not trap this call (many Bulgarian viruses are known to
  4261.       use it to get the original ROM entry point)
  4262. SeeAlso: INT 13/AH=01h,INT 19
  4263. ----------2F1400-----------------------------
  4264. INT 2F - NLSFUNC.COM - INSTALLATION CHECK
  4265.     AX = 1400h
  4266. Return: AL = 00h not installed, OK to install
  4267.          01h not installed, not OK
  4268.          FFh installed
  4269. Notes:    called by DOS v3.3+ kernel
  4270.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  4271.     supported by DR-DOS 5.0
  4272.     documented for MS-DOS 5.0, but undocumented in prior versions
  4273. ----------2F1401-----------------------------
  4274. INT 2F - NLSFUNC.COM - CHANGE CODE PAGE
  4275.     AX = 1401h
  4276.     DS:SI -> internal code page structure (see below)
  4277.     BX = new code page
  4278.     DX = country code???
  4279. Return: AL = status
  4280.          00h successful
  4281.          else DOS error code
  4282. Note:    called by DOS v3.3+ kernel
  4283. SeeAlso: INT 21/AH=66h
  4284.  
  4285. Format of DOS 3.30 internal code page structure:
  4286. Offset    Size    Description
  4287.  00h  8 BYTEs    ???
  4288.  08h 64 BYTEs    name of country information file
  4289.  48h    WORD    system code page
  4290.  4Ah    WORD    number of supported subfunctions
  4291.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  4292.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  4293.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  4294.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  4295.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  4296. ----------2F1402-----------------------------
  4297. INT 2F - NLSFUNC.COM - GET COUNTRY INFO
  4298.     AX = 1402h
  4299.     BP = subfunction (same as AL for INT 21/AH=65h)
  4300.     BX = code page
  4301.     DX = country code
  4302.     DS:SI -> internal code page structure (see AX=1401h)
  4303.     ES:DI -> user buffer
  4304.     CX = size of user buffer
  4305. Return: AL = status
  4306.         00h successful
  4307.         else DOS error code
  4308. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  4309.     code page structure apparently only needed for COUNTRY.SYS pathname
  4310. SeeAlso: AX=1403h,AX=1404h,INT 21/AH=65h
  4311. ----------2F1403-----------------------------
  4312. INT 2F - NLSFUNC.COM - SET COUNTRY INFO
  4313.     AX = 1403h
  4314.     DS:SI -> internal code page structure (see AX=1401h)
  4315.     BX = code page
  4316.     DX = country code
  4317. Return: AL = status 
  4318.          ???
  4319. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  4320. SeeAlso: AX=1402h,AX=1404h,INT 21/AH=38h"SET"
  4321. ----------2F1404-----------------------------
  4322. INT 2F - NLSFUNC.COM - GET COUNTRY INFO
  4323.     AX = 1404h
  4324.     BX = code page
  4325.     DX = country code
  4326.     DS:SI -> internal code page structure (see AX=1401h)
  4327.     ES:DI -> user buffer
  4328. Return: AL = status
  4329.          ???
  4330. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  4331.     code page structure apparently only needed for COUNTRY.SYS pathname
  4332. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  4333. ----------2F14FE-----------------------------
  4334. INT 2F - DR-DOS 5.0 NLSFUNC - ???
  4335.     AX = 14FEh
  4336.     DI = ???
  4337.     ???
  4338. Return: ???
  4339. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4340.       or FFh on entry.
  4341. SeeAlso: AX=14FFh
  4342. ----------2F14FF-----------------------------
  4343. INT 2F - DR-DOS 5.0 NLSFUNC - ???
  4344.     AX = 14FFh
  4345.     ???
  4346. Return: ???
  4347. Note:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  4348.       or FFh on entry.
  4349. SeeAlso: AX=14FEh
  4350. ----------2F1500-----------------------------
  4351. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  4352.     AX = 1500h
  4353. Return: AX = FFFFh
  4354.     ES:DI -> ??? (graphics data?)
  4355. Note:    this installation check conflicts with the CD-ROM Extensions
  4356.       installation check; moved to AX=AC00h in later versions
  4357. SeeAlso: AX=AC00h
  4358. ----------2F1500BX0000-----------------------
  4359. INT 2F - CD-ROM - INSTALLATION CHECK
  4360.     AX = 1500h
  4361.     BX = 0000h
  4362. Return: BX = number of CD-ROM drive letters used
  4363.     CX = starting drive letter (0=A:)
  4364. Notes:    this installation check DOES NOT follow the format used by other
  4365.       software
  4366.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  4367.       installation check
  4368. ----------2F1501-----------------------------
  4369. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  4370.     AX = 1501h
  4371.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  4372. Return: buffer filled, for each drive letter
  4373.       BYTE    subunit number in driver
  4374.       DWORD address of device driver header
  4375. ----------2F1502-----------------------------
  4376. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  4377.     AX = 1502h
  4378.     ES:BX -> 38-byte buffer for name of copyright file
  4379.     CX = drive number (0=A:)
  4380. Return: CF set if drive is not a CD-ROM drive
  4381.         AX = 15 (invalid drive)
  4382.     CF clear if successful
  4383. SeeAlso: AX=1503h
  4384. ----------2F1503-----------------------------
  4385. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  4386.     AX = 1503h
  4387.     ES:BX -> 38-byte buffer for name of abstract file
  4388.     CX = drive number (0=A:)
  4389. Return: CF set if drive is not a CD-ROM drive
  4390.         AX = 15 (invalid drive)
  4391.     CF clear if successful
  4392. SeeAlso: AX=1502h
  4393. ----------2F1504-----------------------------
  4394. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  4395.     AX = 1504h
  4396.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  4397.     CX = drive number (0=A:)
  4398. Return: CF set if drive is not a CD-ROM drive
  4399.         AX = 15 (invalid drive)
  4400.     CF clear if successful
  4401. ----------2F1505-----------------------------
  4402. INT 2F - CD-ROM - READ VTOC
  4403.     AX = 1505h
  4404.     ES:BX -> 2048-byte buffer
  4405.     CX = drive number (0=A:)
  4406.     DX = sector index (0=first volume descriptor,1=second,...)
  4407. Return: CF set on error
  4408.         AX = error code (15=invalid drive,21=not ready)
  4409.     CF clear if successful
  4410.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  4411. ----------2F1506-----------------------------
  4412. INT 2F - CD-ROM - TURN DEBUGGING ON
  4413.     AX = 1506h
  4414.     BX = debugging function to enable
  4415. Note:    reserved for development
  4416. SeeAlso: AX=1507h
  4417. ----------2F1507-----------------------------
  4418. INT 2F - CD-ROM - TURN DEBUGGING OFF
  4419.     AX = 1507h
  4420.     BX = debugging function to disable
  4421. Note:    reserved for development
  4422. SeeAlso: AX=1506h
  4423. ----------2F1508-----------------------------
  4424. INT 2F - CD-ROM - ABSOLUTE DISK READ
  4425.     AX = 1508h
  4426.     ES:BX -> buffer
  4427.     CX = drive number (0=A:)
  4428.     SI:DI = starting sector number
  4429.     DX = number of sectors to read
  4430. Return: CF set on error
  4431.         AL = error code (15=invalid drive,21=not ready)
  4432.     CF clear if successful
  4433. SeeAlso: AX=1509h
  4434. ----------2F1509-----------------------------
  4435. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  4436.     AX = 1509h
  4437.     ES:BX -> buffer
  4438.     CX = drive number (0=A:)
  4439.     SI:DI = starting sector number
  4440.     DX = number of sectors to write
  4441. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  4442. SeeAlso: AX=1508h
  4443. ----------2F150A-----------------------------
  4444. INT 2F - CD-ROM - RESERVED
  4445.     AX = 150Ah
  4446. ----------2F150B-----------------------------
  4447. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  4448.     AX = 150Bh
  4449.     CX = drive number (0=A:)
  4450. Return: BX = ADADh if MSCDEX.EXE installed
  4451.         AX = 0000h if drive not supported
  4452.         nonzero if supported
  4453. SeeAlso: AX=150Dh
  4454. ----------2F150C-----------------------------
  4455. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  4456.     AX = 150Ch
  4457. Return: BH = major version
  4458.     BL = minor version
  4459. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  4460. ----------2F150D-----------------------------
  4461. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  4462.     AX = 150Dh
  4463.     ES:BX -> buffer for drive letter list (1 byte per drive)
  4464. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  4465.     to the drive in the same position for function 1501h
  4466. SeeAlso: AX=150Bh
  4467. ----------2F150E-----------------------------
  4468. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  4469.     AX = 150Eh
  4470.     BX = subfunction
  4471.         00h get preference
  4472.         DX = 0000h
  4473.         Return: DX = preference settings
  4474.         01h set preference
  4475.         DH = volume descriptor preference
  4476.             01h = primary volume descriptor
  4477.             02h = supplementary volume descriptor
  4478.         DL = supplementary volume descriptor preference
  4479.             01h = shift-Kanji
  4480.     CX = drive number (0=A:)
  4481. Return: CF set on error
  4482.         AX = error code (15=invalid drive,1=invalid function)
  4483.     CF clear if successful
  4484. ----------2F150F-----------------------------
  4485. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  4486.     AX = 150Fh
  4487.     CL = drive number (0=A:)
  4488.     CH bit 0 = copy flag
  4489.         clear if direct copy
  4490.         set if copy to structure which removed ISO/High Sierra diffs
  4491.     ES:BX -> ASCIZ path name
  4492.     SI:DI -> buffer for directory entry (see below)
  4493.          minimum 255 bytes for direct copy
  4494. Return: CF set on error
  4495.         AX = error code
  4496.     CF clear if succesful
  4497.         AX = disk format (0=High Sierra,1=ISO 9660)
  4498.  
  4499. Format of directory entry (direct copy):
  4500. Offset    Size    Description
  4501.  00h    BYTE  length of directory entry
  4502.  01h    BYTE  length of XAR in Logical Block Numbers
  4503.  02h    DWORD LBN of data, Intel (little-endian) format
  4504.  06h    DWORD LBN of data, Motorola (big-endian) format
  4505.  0Ah    DWORD length of file, Intel format
  4506.  0Eh    DWORD length of file, Motorola format
  4507. ---High Sierra---
  4508.  12h  6 BYTEs date and time
  4509.  18h    BYTE  bit flags
  4510.  19h    BYTE  reserved
  4511. ---ISO 9660---
  4512.  12h  7 BYTEs date and time
  4513.  19h    BYTE  bit flags
  4514. ---both formats---
  4515.  1Ah    BYTE  interleave size
  4516.  1Bh    BYTE  interleave skip factor
  4517.  1Ch    WORD  volume set sequence number, Intel format
  4518.  1Eh    WORD  volume set sequence number, Motorola format
  4519.  20h    BYTE  length of file name
  4520.  21h  N BYTEs file name
  4521.     BYTE (optional) padding if filename is odd length
  4522.       N BYTEs system data
  4523.  
  4524. Format of directory entry (canonicalized):
  4525. Offset    Size    Description
  4526.  00h    BYTE    length of XAR in Logical Block Numbers
  4527.  01h    DWORD    Logical Block Number of file start
  4528.  05h    WORD    size of disk in logical blocks
  4529.  07h    DWORD    file length in bytes
  4530.  0Bh  7 BYTEs    date and time
  4531.  12h    BYTE    bit flags
  4532.  13h    BYTE    interleave size
  4533.  14h    BYTE    interleave skip factor
  4534.  15h    WORD    volume set sequence number
  4535.  17h    BYTE    length of file name
  4536.  18h 38 BYTEs    ASCIZ filename
  4537.  3Eh    WORD    file version number
  4538.  40h    BYTE    number of bytes of system use data
  4539.  41h 220 BYTEs    system use data
  4540. ----------2F1510-----------------------------
  4541. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  4542.     AX = 1510h
  4543.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  4544.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  4545. ----------2F1600-----------------------------
  4546. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK
  4547.     AX = 1600h
  4548. Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running
  4549.     AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running
  4550.     AL = 01h if Windows/386 2.x running
  4551.     AL = FFh if Windows/386 2.x running
  4552.     AL = anything else
  4553.         AL = Windows major version number >= 3
  4554.         AH = Windows minor version number
  4555. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  4556.       drivers, TSRs, and applications) to cooperate with multitasking
  4557.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  4558.     certain calls are also supported in the Microsoft 80286 DOS extender in
  4559.       Windows standard mode
  4560. SeeAlso: AX=4680h
  4561. ----------2F1602-----------------------------
  4562. INT 2F - Multiplex - MS WINDOWS/386 2.x - GET API ENTRY POINT
  4563.     AX = 1602h
  4564. Return: ES:DI -> Windows/386 2.x API procedure entry point
  4565. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  4566.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  4567.         AX = 0000h
  4568.         ES:DI -> return address
  4569.         JUMP to address returned from INT 2F/AX=1602h
  4570.     After JUMP, at return address:
  4571.         BX = current VM ID.
  4572. ----------2F1605-----------------------------
  4573. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  4574.     AX = 1605h
  4575.     ES:BX = 0000h:0000h
  4576.     DS:SI = 0000h:0000h
  4577.     CX = 0000h
  4578.     DX = flags
  4579.         bit 0 = 0 if Windows enhanced-mode initialization
  4580.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  4581.         bits 1-15 reserved (undefined)
  4582.     DI = version number (major in upper byte, minor in lower)
  4583. Return: CX = 0000h if okay for Windows to load
  4584.     CX <> 0 if Windows should not load
  4585.     ES:BX -> startup info structure (see below)
  4586.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  4587. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  4588.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  4589.       driver or TSR can watch for this broadcast and return the appropriate
  4590.       values.  If the driver or TSR returns CX <> 0, it is also its
  4591.       responsibility to display an error message.
  4592.     each handler must first chain to the prior INT 2F handler with
  4593.       registers unchanged before processing the call
  4594.     if the handler requires local data on a per-VM basis, it must store the
  4595.       returned ES:BX in the "next" field of a startup info structure and
  4596.       return a pointer to that structure in ES:BX
  4597.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  4598.       already nonzero, the TSR must fail the initialization by setting CX
  4599.       nonzero
  4600. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  4601.  
  4602. Format of Startup Information Structure:
  4603. Offset    Size    Description
  4604.  00h  2 BYTEs    major, minor version of info structure
  4605.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  4606.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  4607.  0Ah    DWORD    virtual device reference data (only used if above nonzero)
  4608.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  4609.  
  4610. Format of one Instance Item in array:
  4611. Offset    Size    Description
  4612.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  4613.  04h    WORD    size of instance data
  4614.  
  4615. Virtual mode enable/disable procedure called with:
  4616.     AX = 0000h disable V86 mode
  4617.     AX = 0001h enable V86 mode
  4618.     interrupts disabled
  4619. Return: CF set on error
  4620.     CF clear if successful
  4621.     interrupts disabled
  4622. ----------2F1606-----------------------------
  4623. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  4624.     AX = 1606h
  4625.     DX = flags
  4626.         bit 0 = 0 if Windows enhanced-mode exit
  4627.         bit 0 = 1 if Microsoft 286 DOS extender exit
  4628.         bits 1-15 reserved (undefined)
  4629. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  4630.       broadcast will be issued immediately.
  4631.     this call will be issued in real mode
  4632. SeeAlso: AX=1605h,AX=1609h
  4633. ----------2F1607-----------------------------
  4634. INT 2F - Multiplex - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  4635.     AX = 1607h
  4636.     BX = virtual device ID (see INT 2F/AX=1684h)
  4637. Notes:    more of a convention than an API, this call specifies a standard
  4638.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  4639.       to DOS device drivers and TSRs
  4640.     VNETBIOS calls this function and then checks ES:DI to determine whether
  4641.       the NetBIOS has any extensions Windows should know about
  4642.     VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  4643.       nonzero; if yes, it will not automatically virtualize the mouse
  4644.       driver.  This would be used if MOUSE.COM already virtualizes
  4645.       itself using the Windows API.
  4646. SeeAlso: AX=1605h,AX=1684h
  4647. ----------2F1608-----------------------------
  4648. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  4649.     AX = 1608h
  4650. Notes:    called after all installable devices have been initialized
  4651.     real-mode software may be called between the Windows enhanced-mode init
  4652.       call (AX=1605h) and this call; the software must detect this
  4653.       situation
  4654. SeeAlso: AX=1605h,AX=1609h
  4655. ----------2F1609-----------------------------
  4656. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  4657.     AX = 1609h
  4658. Note:    called at the beginning of a normal exit sequence; not made in the
  4659.       event of a fatal system crash
  4660. SeeAlso: AX=1606h,AX=1608h
  4661. ----------2F1680-----------------------------
  4662. INT 2F - Multiplex - various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  4663.     AX = 1680h
  4664. Return: AL = 00h if the call is supported
  4665.     AL = 80h (unchanged) if the call is not supported
  4666. Notes:    programs can use this function in idle loops to enhance performance
  4667.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  4668.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  4669.       applications
  4670.     does not block the program; it just gives up the remainder of the time
  4671.       slice
  4672.     should not be used by Windows programs
  4673. SeeAlso: INT 15/AX=1000h
  4674. ----------2F1681-----------------------------
  4675. INT 2F - Multiplex - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  4676.     AX = 1681h
  4677. Notes:    used to prevent a task switch from occurring
  4678.     should be followed by an INT 2F/AX=1682h call as soon as possible
  4679.     nested calls are allowed, and must be followed by an appropriate number
  4680.       of "end critical section" calls
  4681.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  4682.       and increment by hand.
  4683. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  4684. ----------2F1682-----------------------------
  4685. INT 2F - Multiplex - MS WINDOWS 3+ - END CRITICAL SECTION
  4686.     AX = 1682h
  4687. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  4688.       and decrement by hand, taking care not to decrement InDOS flag
  4689.       through zero
  4690. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  4691. ----------2F1683-----------------------------
  4692. INT 2F - Multiplex - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  4693.     AX = 1683h
  4694. Return: BX = current virtual machine (VM) ID
  4695. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  4696.     VM IDs are reused when VMs are destroyed
  4697.     an ID of 0 will never be returned
  4698. SeeAlso: AX=1684h,AX=1685h
  4699. ----------2F1684-----------------------------
  4700. INT 2F - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT
  4701.     AX = 1684h
  4702.     BX = virtual device (VxD) ID (see below)
  4703.     ES:DI = 0000h:0000h
  4704. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  4705. Note:    some Windows enhanced-mode virtual devices provide services that
  4706.       applications can access.  For example, the Virtual Display Device
  4707.       (VDD) provides an API used in turn by WINOLDAP.
  4708. SeeAlso: AX=1683h
  4709.  
  4710. Values for VxD ID:
  4711.  01h    VMM        Virtual Machine Manager
  4712.  02h    Debug
  4713.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  4714.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  4715.  05h    VTD        Virtual Timer Device
  4716.  06h    V86MMGR        Virtual 8086 Mode Device
  4717.  07h    PAGESWAP    Paging Device
  4718.  08h    Parity
  4719.  09h    Reboot
  4720.  0Ah    VDD        Virtual Display Device (GRABBER)
  4721.  0Bh    VSD        Virtual Sound Device
  4722.  0Ch    VMD        Virtual Mouse Device
  4723.  0Dh    VKD        Virtual Keyboard Device
  4724.  0Eh    VCD        Virtual COMM Device
  4725.  0Fh    VPD        Virtual Printer Device
  4726.  10h    VHD        Virtual Hard Disk Device
  4727.  11h    VMCPD
  4728.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  4729.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  4730.  14h    VNETBIOS    Virtual NetBIOS Device
  4731.  15h    DOSMGR
  4732.  16h    WINLOAD
  4733.  17h    SHELL
  4734.  18h    VMPoll
  4735.  19h    VPROD
  4736.  1Ah    DOSNET        assures network integrity across VMs
  4737.  1Bh    VFD        Virtual Floppy Device
  4738.  1Ch    VDD2        Secondary display adapter
  4739.  1Dh    WINDEBUG
  4740.  1Eh    TSRLoad        TSR instance utility
  4741. Note:    The high bit of the VxD ID is reserved for future use. The
  4742.     next 10 bits are the OEM # which is assigned by Microsoft. The
  4743.     low 5 bits are the device number. 
  4744. ----------2F1685-----------------------------
  4745. INT 2F - Multiplex - MS WINDOWS - SWITCH VMs AND CALLBACK
  4746.     AX = 1685h
  4747.     BX = VM ID of virtual machine to switch to
  4748.     CX = flags
  4749.         bit 0 wait until interrupts enabled
  4750.         bit 1 wait until critical section unowned
  4751.         bits 2-15 reserved (zero)
  4752.     DX:SI = priority boost (see VMM.INC)
  4753.     ES:DI -> FAR procedure to callback
  4754. Return: CF set on error
  4755.         AX = error code
  4756.         01h invalid VM ID
  4757.         02h invalid priority boost
  4758.         03h invalid flags
  4759.     CF clear if successful
  4760.         event will be or has been called
  4761. Notes:    some DOS devices, such as networks, need to call functions in a
  4762.       specific VM. This call forces the appropriate VM to be installed.
  4763.     the callback procedure must preserve all registers and return with IRET
  4764. SeeAlso: AX=1683h,INT 15/AX=1117h
  4765. ----------2F1686-----------------------------
  4766. INT 2F - Multiplex - DOS Protected-Mode Interface - DETECT MODE
  4767.     AX = 1686h
  4768. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4769.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4770. SeeAlso: AX=1687h
  4771. ----------2F1687-----------------------------
  4772. INT 2F - Multiplex - DOS Protected-Mode Interface - INSTALLATION CHECK
  4773.     AX = 1687h
  4774. Return: AX = 0000h if installed
  4775.         BX = flags
  4776.         bit 0: 32-bit programs supported
  4777.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4778.         DH = DPMI major version
  4779.         DL = two-digit DPMI minor version
  4780.         SI = number of paragraphs of DOS extender private data
  4781.         ES:DI -> DPMI mode-switch entry point
  4782.     AX nonzero if not installed
  4783. SeeAlso: AX=1686h
  4784.  
  4785. Call mode switch entry point with:
  4786.     AX = flags
  4787.         bit 0: set if 32-bit program
  4788.     ES = real mode segment of buffer for DPMI private data (ignored if
  4789.         SI was zero)
  4790. Return: CF set on error
  4791.         program still in real mode
  4792.         AX = error code (DPMI 1.0+)
  4793.            8011h unable to allocate all necessary descriptors
  4794.            8021h 32-bit program specified, but 16-bit DPMI host
  4795.     CF clear if successful
  4796.         CS = 16-bit selector corresponding to real-mode CS
  4797.         SS = selector corresponding to real-mode SS (64K limit)
  4798.         DS = selector corresponding to real-mode DS (64K limit)
  4799.         ES = selector to program's PSP (100h byte limit)
  4800.         FS = GS = 0
  4801.         high word of ESP = 0 if 32-bit program
  4802.         program now in protected mode
  4803. Note:    this entry point is only called for the initial switch to protected
  4804.       mode
  4805. ----------2F1688-----------------------------
  4806. INT 2F - Multiplex - MS Windows 3.0 - GET SELECTOR TO LDT???
  4807.     AX = 1688h
  4808.     ???
  4809. Return: ???
  4810. ----------2F1689-----------------------------
  4811. INT 2F - Multiplex - MS Windows 3.0 - IDLE CALL???
  4812.     AX = 1689h
  4813.     ???
  4814. Return: ???
  4815. ----------2F168A-----------------------------
  4816. INT 2F - Multiplex - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4817.     AX = 168Ah
  4818.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4819. Return: AL = status
  4820.         00h successful
  4821.            ES:(E)DI -> extended API entry point
  4822.         8Ah unsuccessful
  4823. Notes:    the vendor name is used to determine which entry point to return; it is
  4824.       case-sensitive
  4825.     available in protected mode only
  4826.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4827.     this call is present but not documented for DPMI 0.9
  4828. SeeAlso: INT 31/AX=0A00h
  4829. ----------2F1700-----------------------------
  4830. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4831.     AX = 1700h
  4832. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4833.     AX <> 1700h
  4834.         AL = WINOLDAP major version
  4835.         AH = WINOLDAP minor version
  4836. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4837.       "old" (character-mode) application access to Dynamic Data Exchange,
  4838.       menus, and the Windows clipboard.
  4839.     this installation check DOES NOT follow the format used by other
  4840.       software
  4841. ----------2F1701-----------------------------
  4842. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  4843.     AX = 1701h
  4844. Return:    AX <> 0     success
  4845.     AX = 0     clipboard is already open
  4846. ----------2F1702-----------------------------
  4847. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  4848.     AX = 1702h
  4849. Return: AX <> 0     clipboard has been emptied
  4850.     AX = 0     failure
  4851. ----------2F1703-----------------------------
  4852. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  4853.     AX = 1703h
  4854.     DX = clipboard format supported by WinOldAp:
  4855.         01h text
  4856.         02h bitmap
  4857.         03h metafile picture
  4858.         04h SYLK
  4859.         05h DIF
  4860.         06h TIFF
  4861.         07h OEM text
  4862.     ES:BX -> data (see below for formats)
  4863.     SI:CX = size of data
  4864. Return: AX <> 0 data copied into the Clipboard
  4865.     AX = 0 failure
  4866.  
  4867. Format of bitmap:
  4868. Offset    Size    Description
  4869.  00h    WORD    type (0000h)
  4870.  02h    WORD    width of bitmap in pixels
  4871.  04h    WORD    height of bitmap in pixels
  4872.  06h    WORD    bytes per line
  4873.  08h    BYTE    number of color planes
  4874.  09h    BYTE    number of adjacent color bits in pixel
  4875.  0Ah    DWORD    pointer to start of data
  4876.  0Eh    WORD    width in 0.1mm units
  4877.  10h    WORD    height in 0.1mm units
  4878.  12h  N BYTEs    bitmap data
  4879.  
  4880. Format of metafile picture:
  4881. Offset    Size    Description
  4882.  00h    WORD    mapping mode
  4883.  02h    WORD    X extent
  4884.  04h    WORD    Y extent
  4885.  06h    WORD    picture data
  4886. ----------2F1704-----------------------------
  4887. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4888.     AX = 1704h
  4889.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4890. Return:     DX:AX = size of data in bytes, including any headers
  4891. Failure: DX:AX = 0  no data in this format in the Clipboard
  4892. ----------2F1705-----------------------------
  4893. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  4894.     AX = 1705h
  4895.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4896.     ES:BX -> buffer
  4897. Return: AX <> 0     success
  4898.     AX = 0     error, or no data in this format in Clipboard
  4899. ----------2F1708-----------------------------
  4900. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - CloseClipboard
  4901.     AX = 1708h
  4902. Return: AX <> 0 success
  4903.     AX = 0 failure
  4904. ----------2F1709-----------------------------
  4905. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  4906.     AX = 1709h
  4907.     SI:CX = desired size in bytes
  4908. Return: DX:AX = number of bytes in largest block of free memory
  4909. Note:    WinOldAp is responsible for including the size of any headers
  4910. ----------2F170A-----------------------------
  4911. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  4912.     AX = 170Ah
  4913.     DX = GDI information index
  4914.         00h device driver version
  4915.         02h device classification
  4916.         04h width in mm
  4917.         06h height in mm
  4918.         08h width in pixels
  4919.         0Ah height in pixels
  4920.         0Ch bits per pixel
  4921.         0Eh number of bit planes
  4922.         10h number of brushes supported by device
  4923.         12h number of pens supported by device
  4924.         14h number of markers supported by device
  4925.         16h number of fonts supported by device
  4926.         18h number of colors
  4927.         1Ah size required for device descriptor
  4928.         1Ch curve capabilities
  4929.         1Eh line capabilities
  4930.         20h polygon capabilities
  4931.         22h text capabilities
  4932.         24h clipping capabilities
  4933.         26h bitblt capabilities
  4934.         28h X aspect
  4935.         2Ah Y aspect
  4936.         2Ch length of hypotenuse of aspect
  4937.         58h logical pixels per inch of width
  4938.         5Ah logical pixels per inch of height
  4939. Return:     AX = integer value of the desired item
  4940.         device classification
  4941.             00h vector plotter
  4942.             01h raster display
  4943.             02h raster printer
  4944.             03h raster camera
  4945.             04h character-stream, PLP
  4946.             05h Metafile, VDM
  4947.             06h display-file
  4948.         curve capabilities
  4949.             bit 0  circles
  4950.             bit 1  pie wedges
  4951.             bit 2  chord arcs
  4952.             bit 3  ellipses
  4953.             bit 4  wide lines
  4954.             bit 5  styled lines
  4955.             bit 6  wide styled lines
  4956.             bit 7  interiors
  4957.         line capabilities
  4958.             bit 1  polylines
  4959.             bit 2  markers
  4960.             bit 3  polymarkers
  4961.             bit 4  wide lines
  4962.             bit 5  styled lines
  4963.             bit 6  wide styled lines
  4964.             bit 7  interiors
  4965.         polygon capabilities
  4966.             bit 0  polygons
  4967.             bit 1  rectangles
  4968.             bit 2  trapezoids
  4969.             bit 3  scanlines
  4970.             bit 4  wide borders
  4971.             bit 5  styled borders
  4972.             bit 6  wide styled borders
  4973.             bit 7  interiors
  4974.         text capabilities
  4975.             bit 0  output precision character
  4976.             bit 1  output precision stroke
  4977.             bit 2  clippping precision stroke
  4978.             bit 3  90-degree character rotation
  4979.             bit 4  arbitrary character rotation
  4980.             bit 5  independent X and Y scaling
  4981.             bit 6  double-size
  4982.             bit 7  integer scaling
  4983.             bit 8  continuous scaling
  4984.             bit 9  bold
  4985.             bit 10 italic
  4986.             bit 11 underline
  4987.             bit 12 strikeout
  4988.             bit 13 raster fonts
  4989.             bit 14 vector fonts
  4990.             bit 15 reserved
  4991.         clipping capabilities
  4992.             00h none
  4993.             01h clipping to rectangles
  4994.         raster capabilities
  4995.             bit 0  simple bitBLT
  4996.             bit 1  device requires banding support
  4997.             bit 2  device requires scaling support
  4998.             bit 3  supports >64K bitmap
  4999. Note:  This function returns the device-capability bits for the given display
  5000. ----------2F1900-----------------------------
  5001. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  5002.     AX = 1900h
  5003. Return: AL = 00h  not installed
  5004.          FFh  installed
  5005. ----------2F1901BL00-------------------------
  5006. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  5007.     AX = 1901h
  5008.     BL = 00h if SHELLC transient
  5009.          01h if SHELLC resident
  5010.     DS:DX -> far call entry point for resident SHELLC.EXE
  5011. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  5012. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  5013. ----------2F1902-----------------------------
  5014. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  5015.     AX = 1902h
  5016.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  5017.          final filename element uppercased
  5018.     DS:DX -> buffer for results
  5019. Return: AL = 00h  failed, either
  5020.           (a) final filename element quoted at ES:DI does not match
  5021.               identity of shell batch file quoted as parameter of most
  5022.               recent call of SHELLB command, or
  5023.           (b) no more Program Start Commands available.
  5024.     AL= FFh     success, then:
  5025.         memory at DS:[DX+1] onwards filled as:
  5026.         DX+1:    BYTE    count of bytes of PSC
  5027.         DX+2: N BYTEs    Program Start Command text
  5028.             BYTE    0Dh terminator 
  5029. Explanation: COMMAND.COM executes the result of this call in preference to 
  5030.     reading a command from a batch file. Thus the batch file does not
  5031.     advance in execution for so long as SHELLB provides PSCs from its
  5032.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  5033.     menu interface. The final PSC of a sequence is finished with a 
  5034.     GOTO COMMON, which causes a loop back in the batch file which called
  5035.     SHELLC so as to execute SHELLC again. The check on batch file name
  5036.     permits PSCs to CALL nested batch files while PSCs are still stacked
  5037.     up for subsequent execution.
  5038. ----------2F1903-----------------------------
  5039. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  5040.     AX = 1903h
  5041.     ES:DI -> ASCIZ batch file name as for AX=1902h
  5042. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  5043.     AL = 00h if it does not
  5044. ----------2F1904-----------------------------
  5045. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  5046.     AX = 1904h
  5047. Return: ES:DI -> name of current shell batch file:
  5048.         WORD    number of bytes of name following
  5049.         BYTEs    (8 max) uppercase name of shell batch file
  5050. ----------2F1A00-----------------------------
  5051. INT 2F - Multiplex - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  5052.     AX = 1A00h
  5053. Return: AL = FFh if installed
  5054. Notes:    AVATAR.SYS also responds to this call
  5055.     documented for DOS 5+, but undocumented for DOS 4.x
  5056. ----------2F1A00BX4156-----------------------
  5057. INT 2F - Multiplex - AVATAR.SYS - INSTALLATION CHECK
  5058.     AX = 1A00h
  5059.     BX = 4156h ('AV')
  5060.     CX = 4154h ('AT')
  5061.     DX = 4152h ('AR')
  5062. Return: AL = FFh if installed
  5063.         CF clear
  5064.         BX = AVATAR protocol level supported
  5065.         CX = driver type
  5066.         0000h AVATAR.SYS
  5067.         4456h DVAVATAR.COM inside DESQview window
  5068.         DX = 0016h
  5069. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  5070.       the magic values
  5071.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  5072.       interprets AVATAR command codes in the same way that ANSI interprets
  5073.       ANSI command codes
  5074. ----------2F1A01-----------------------------
  5075. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  5076.     AX = 1A01h
  5077.     CL = function
  5078.         7Fh for GET
  5079.         5Fh for SET
  5080.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  5081. Return: CF set on error
  5082.         AX = error code (many non-standard)
  5083.     CF clear if successful
  5084.         AX destroyed
  5085. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  5086. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  5087. ----------2F1A02-----------------------------
  5088. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - MISC REQUESTS
  5089.     AX = 1A02h
  5090.     DS:DX -> parameter block (see below)
  5091. Note:    DOS 5.0 chains to previous handler if AL > 02h on call
  5092. SeeAlso: AX=1A01h
  5093.  
  5094. Format of parameter block:
  5095. Offset    Size    Description
  5096.  00h    BYTE    subfunction
  5097.         00h set/reset interlock
  5098.         01h get /L flag
  5099.  01h    BYTE    interlock state
  5100.         00h=reset, 01h=set
  5101.           This interlock prevents some of the ANSI.SYS post-processing
  5102.           in its hook onto INT 10, AH=00h mode set
  5103.  02h    BYTE    (returned)
  5104.         00h if /L not in effect
  5105.         01h if /L in effect
  5106. ----------2F1A21-----------------------------
  5107. INT 2F - Multiplex - AVATAR.SYS - SET DRIVER STATE
  5108.     AX = 1A21h (AL='!')
  5109.     DS:SI -> command string with one or more state characters
  5110.     CX = length of command string
  5111. Return: CF set on error (invalid subfunction)
  5112.     CF clear if successful
  5113. Note:    the characters in the state string are interpreted left to right, and
  5114.       need not be in any particular order
  5115. SeeAlso: AX=1A3Fh
  5116.  
  5117. Values of state characters:
  5118.  'a'    activate driver
  5119.  'd'    disable driver
  5120.  'f'    use fast screen output
  5121.  'g'    always convert gray keys (+ and -) to function keys
  5122.  'G'    never convert gray keys
  5123.  'l'    convert gray keys only when ScrollLock active
  5124.  's'    use slow screen output
  5125.  't'    Tandy 1000 keyboard (not yet implemented)
  5126. ----------2F1A3C-----------------------------
  5127. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5128.     AX = 1A3Ch
  5129.     ???
  5130. Return: CX = 0000h
  5131. ----------2F1A3E-----------------------------
  5132. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5133.     AX = 1A3Eh
  5134.     CL = ???
  5135.     CH = ???
  5136.     DL = ???
  5137.     DH = ???
  5138. Return: CL = ???
  5139.     CH = ???
  5140.     DL = ???
  5141.     DH = ???
  5142. ----------2F1A3F-----------------------------
  5143. INT 2F - Multiplex - AVATAR.SYS - QUERY DRIVER STATE
  5144.     AX = 1A3Fh (AL='?')
  5145.     ES:DI -> buffer
  5146.     CX = length of buffer in bytes
  5147. Return: CF clear
  5148.     CX = actual size of returned info
  5149. Note:    the returned information consists of multiple letters whose meanings
  5150.       are described under AX=1A21h
  5151. SeeAlso: AX=1A21h
  5152. ----------2F1A42BX4156-----------------------
  5153. INT 2F - Multiplex - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  5154.     AX = 1A42h
  5155.     BX = 4156h ('AV')
  5156.     ES:DI -> FAR handler for serial port using IRQ3
  5157.     DS = data segment needed by handler
  5158. Return: AX = 1A42h if ASD not installed
  5159.        = 0000h if no more room
  5160.        else handle to use when uninstalling
  5161. Notes:    the handler need not save/restore registers or signal EOI to the
  5162.       interrupt controller
  5163.     the handler should return AX=0000h if the interrupt was meant for it,
  5164.       and either leave AX unchanged or return a non-zero value otherwise
  5165.     the most recently installed handler will be called first, continuing
  5166.       to earlier handlers until one returns AX=0000h
  5167. SeeAlso: AX=1A43h,AX=1A62h
  5168. ----------2F1A43BX4156-----------------------
  5169. INT 2F - Multiplex - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  5170.     AX = 1A43h
  5171.     BX = 4156h ('AV')
  5172.     ES:DI -> FAR handler for serial port using IRQ4
  5173.     DS = data segment needed by handler
  5174. Return: AX = 1A43h if ASD not installed
  5175.        = 0000h if no more room
  5176.        else handle to use when uninstalling
  5177. Notes:    (see AX=1A42h)
  5178. SeeAlso: AX=1A42h,AX=1A63h
  5179. ----------2F1A44BX4156-----------------------
  5180. INT 2F - Multiplex - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  5181.     AX = 1A44h
  5182.     BX = 4156h ('AV')
  5183. Return: AX = 0000h
  5184.     DS = data segment
  5185.     CX = size of data segment
  5186. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  5187.       process under a multitasker hooks this function and provides a
  5188.       separate data segment, AVATAR.SYS becomes fully reentrant.
  5189. SeeAlso: AX=1A21h,AX=1A3Fh
  5190. ----------2F1A52-----------------------------
  5191. INT 2F - Multiplex - AVATAR.SYS v0.11 - GET ???
  5192.     AX = 1A52h
  5193.     CX = size of buffer
  5194.     ES:DI -> buffer
  5195. Return: ??? copied into user buffer
  5196. Note:    the maximum size of the data which may be copied is returned by
  5197.       AX=1A72h
  5198. SeeAlso: AX=1A72h
  5199. ----------2F1A53-----------------------------
  5200. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5201.     AX = 1A53h
  5202.     CL = ??? (00h-05h)
  5203.     ???
  5204. Return: ???
  5205. ----------2F1A62BX4156-----------------------
  5206. INT 2F - Multiplex - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  5207.     AX = 1A62h
  5208.     BX = 4156h ('AV')
  5209.     CX = handle for IRQ routine returned by AX=1A42h
  5210. SeeAlso: AX=1A42h,AX=1A63h
  5211. ----------2F1A63BX4156-----------------------
  5212. INT 2F - Multiplex - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  5213.     AX = 1A63h
  5214.     BX = 4156h ('AV')
  5215.     CX = handle for IRQ routine returned by AX=1A43h
  5216. SeeAlso: AX=1A43h,AX=1A62h
  5217. ----------2F1A72-----------------------------
  5218. INT 2F - Multiplex - AVATAR.SYS v0.11 - GET ??? SIZE
  5219.     AX = 1A72h
  5220. Return: CX = maximum size of ???
  5221. SeeAlso: AX=1A52h
  5222. ----------2F1A7B-----------------------------
  5223. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5224.     AX = 1A7Bh
  5225. Return: AX = 0000h
  5226.     CX = 0000h
  5227. ----------2F1A7D-----------------------------
  5228. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5229.     AX = 1A7Dh
  5230. Return: AX = ???
  5231. ----------2F1AADDX0000-----------------------
  5232. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  5233.     AX = 1AADh
  5234.     DX = 0000h
  5235.     CX = subfunction (00h-0Ch)
  5236.     ???
  5237. Return: AX = 0000h if DX was nonzero
  5238.     ???
  5239. ----------2F1B00-----------------------------
  5240. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  5241.     AX = 1B00h
  5242. Return: AL = FFh if installed
  5243. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  5244.     This extension hooks onto INT 67/AH=58h and returns from that call data
  5245.       which excludes the physical pages being used by DOS.
  5246. SeeAlso: AX=1Bh"FRAME INFO"
  5247. ----------2F1B-------------------------------
  5248. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extens internal - GET HIDDEN FRAME INFO
  5249.     AH = 1Bh
  5250.     AL <> 00h
  5251.     DI = hidden physical page number
  5252. Return: AX = FFFFh if failed (no such hidden page)
  5253.     AX = 0000h if OK, then
  5254.          ES = segment of page frame
  5255.          DI = physical page number
  5256. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  5257.     FASTOPEN makes this call with AL = FFh
  5258. SeeAlso: AX=1B00h
  5259. ----------2F2300-----------------------------
  5260. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  5261.     AX = 2300h
  5262. Return: AH = FFh
  5263. Note:    this installation check does not follow the usual format
  5264. SeeAlso: AH=23h
  5265. ----------2F23-------------------------------
  5266. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  5267.     AH = 23h
  5268.     AL nonzero
  5269. Return: AH = FFh
  5270.     ES:BX -> graphics data
  5271. SeeAlso: AX=2300h
  5272. ----------2F2700-----------------------------
  5273. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  5274.     AX = 2700h
  5275. Return: AL = 00h not installed
  5276.        = FFh installed
  5277. ----------2F2701-----------------------------
  5278. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  5279.     AX = 2701h
  5280. Return: AX = maximum simultaneous tasks
  5281.     BX = index into TASK_IDS of current foreground task
  5282.     CX = currently-active tasks
  5283.     DX = version number (DR-DOS 6.0 = 0001h)
  5284.     ES:SI -> TASK_IDS
  5285.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  5286. Notes:    do not attempt to create a new task if CX == AX
  5287.     the task's index is its position on the task menu, while its ID is the
  5288.       position within the internal task name table
  5289. SeeAlso: AX=2714h,AX=2716h
  5290. ----------2F2702-----------------------------
  5291. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  5292.     AX = 2702h
  5293. Return: DX = maximum pages INT 67/AH=42h will report available
  5294. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  5295.       amount which is reported as being available at a given time
  5296. SeeAlso: AX=2703h,INT 67/AH=42h
  5297. ----------2F2703-----------------------------
  5298. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  5299.     AX = 2703h
  5300.     DX = maximum pages INT 67/AH=42h should report available
  5301. Return: DX = new maximum for reporting
  5302. SeeAlso: AX=2702h,INT 67/AH=42h
  5303. ----------2F2704-----------------------------
  5304. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  5305.     AX = 2704h
  5306.     DL = subfunction
  5307.         00h unregister task manager
  5308.         01h register task manager
  5309. Return: DL = status
  5310.         00h registered
  5311.         01h unregistered
  5312. Notes:    a task manager replaces TaskMAX's menu system with its own user
  5313.       interface; while one is registered, the TaskMAX hotkeys and
  5314.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  5315.     unregister the task manager before terminating it
  5316. SeeAlso: AX=2705h
  5317. ----------2F2705-----------------------------
  5318. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  5319.     AX = 2705h
  5320.     DL = subfunction
  5321.         00h disable keystrokes for switching to next/prev/specified task
  5322.         01h enable
  5323. Return: nothing
  5324. Note:    should only be called by a registered task manager (see AX=2704h)
  5325. SeeAlso: AX=2704h,AX=2706h
  5326. ----------2F2706-----------------------------
  5327. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  5328.     AX = 2706h
  5329.     DX = task index (see AX=2701h) of task to be activated
  5330. Return: DX = task index of previously-active task
  5331. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  5332. ----------2F2707-----------------------------
  5333. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  5334.     AX = 2707h
  5335.     DS:DX -> ASCIZ pathname of executable
  5336.     ES:BX -> parameter block (see below)
  5337.     CX = number of ticks before automatic return to task manager
  5338.         (0000h = run until termination or explicitly switched)
  5339. Return: DX = new task's task index (FFFFh if task terminated)
  5340. SeeAlso: AX=2706h,AX=2708h
  5341.  
  5342. Format of parameter block:
  5343. Offset    Size    Description
  5344.  00h    WORD    reserved, should be 0000h
  5345.  02h    DWORD    pointer to command tail to be copied into child's PSP
  5346.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  5347.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  5348. ----------2F2708-----------------------------
  5349. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  5350.     AX = 2708h
  5351.     DX = task index
  5352. Return: DX = FFFFh (task deleted)
  5353. Notes:    this call should only be used for abnormal task termination, after
  5354.       first checking for open files with AX=270Ch; should not be used
  5355.       with programs that allocate EMS or XMS memory
  5356.     switches to specified task first
  5357. SeeAlso: AX=2707h
  5358. ----------2F2709-----------------------------
  5359. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  5360.     AX = 2709h
  5361.     DX = task index
  5362.     DS:SI -> 8-byte name (8 NULs = remove name)
  5363. Return: AL = task flags
  5364.         00h ID unused or task terminated
  5365.         01h ID in use, task name table entry valid
  5366.         81h ID in use, task name fixed
  5367.     BX = task ID
  5368.     ES:DI -> name in task name table (see AX=2701h)
  5369. Note:    the task retains the given name until it terminates or the name is
  5370.       removed by specifying a name of 8 NULs.
  5371. SeeAlso: AX=2701h,AX=2707h
  5372. ----------2F270A-----------------------------
  5373. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  5374.     AX = 270Ah
  5375.     DX = task index
  5376. Return: DX = task ID (FFFFh if index invalid)
  5377. Note:    task IDs stay constant, while indexes can change when other tasks are
  5378.       deleted
  5379. SeeAlso: AX=2701h,AX=270Bh
  5380. ----------2F270B-----------------------------
  5381. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  5382.     AX = 270Bh
  5383.     DX = task ID
  5384. Return: DX = task index (FFFFh if task not active)
  5385. SeeAlso: AX=270Ah
  5386. ----------2F270C-----------------------------
  5387. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  5388.     AX = 270Ch
  5389.     DX = task index
  5390. Return: AX = number of files currently open for specified task
  5391. SeeAlso: AX=2708h
  5392. ----------2F270D-----------------------------
  5393. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  5394.     AX = 270Dh
  5395.     DX = task index
  5396. Return: DX = status
  5397.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5398.         0001h if not in root shell for task
  5399. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5400.       command interpreter with AX=2707h
  5401. SeeAlso: AX=2707h,AX=270Ch
  5402. ----------2F270E-----------------------------
  5403. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5404.     AX = 270Eh
  5405.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5406.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5407. Return: ES:DI -> current lead-in string
  5408. Note:    the specified sequence of keystrokes is sent to the application before
  5409.       every line of a text-mode spreadsheet paste
  5410. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5411. ----------2F270F-----------------------------
  5412. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5413.     AX = 270Fh
  5414.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5415.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5416. Return: ES:DI -> current lead-in string
  5417. Note:    the specified sequence of keystrokes is sent to the application before
  5418.       every number in a numeric-mode spreadsheet paste
  5419. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5420. ----------2F2710-----------------------------
  5421. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5422.     AX = 2710h
  5423.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5424.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5425. Return: ES:DI -> current lead-in string
  5426. Note:    the specified sequence of keystrokes is sent to the application after
  5427.       every line of a spreadsheet paste operation
  5428. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5429. ----------2F2711-----------------------------
  5430. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5431.     AX = 2711h
  5432.     DX = ASCII code for separator (FFFFh to get current)
  5433. Return: DL = current separator character
  5434. SeeAlso: AX=270Fh
  5435. ----------2F2712-----------------------------
  5436. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5437.     AX = 2712h
  5438.     DX = task index
  5439. ----------2F2713-----------------------------
  5440. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5441.     AX = 2713h
  5442.     DX = task index
  5443.     CX = past mode
  5444.         0000h alphanumeric
  5445.         0001h numeric
  5446.         0002h text
  5447. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5448. ----------2F2714-----------------------------
  5449. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5450.     AX = 2714h
  5451. Return: CX = total KB of swap space
  5452.     DX = available KB of swap space
  5453. SeeAlso: AX=2701h
  5454. ----------2F2715-----------------------------
  5455. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5456.     AX = 2715h
  5457. Return: only after calling task is again selected
  5458. SeeAlso: AX=2706h
  5459. ----------2F2716-----------------------------
  5460. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5461.     AX = 2716h
  5462. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5463.         CX = bytes in paste buffer
  5464.         DX = current generation number (updated after every copy operation)
  5465. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5466. ----------2F2717-----------------------------
  5467. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5468.     AX = 2717h
  5469.     CX = bytes in destination buffer
  5470.     ES:DI -> destination buffer
  5471. Return: AX = 0000h if function supported
  5472.         CX = bytes actually copied (FFFFh if buffer too small)
  5473.         DX = current generation number for paste buffer
  5474. Note:    the destination buffer may be too small if another task adds more data
  5475.       to the paste buffer after the AX=2716h call but before this call
  5476. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5477. ----------2F2718-----------------------------
  5478. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5479.     AX = 2718h
  5480.     CX = bytes in source buffer
  5481.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5482. Return: AX = 0000h if function supported
  5483.         CX = bytes actually copied
  5484.         DX = current generation number for paste buffer
  5485. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5486. ----------2F2A-------------------------------
  5487. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5488.     AH = 2Ah
  5489. Note:    details not available at this time
  5490. SeeAlso: AX=8000h"FaxBIOS",AX=CB00h,INT 66"BitFax"
  5491. ----------2F3900-----------------------------
  5492. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5493.     AX = 3900h
  5494. Return: AL = status
  5495.         00h not installed
  5496.         FFh one or more TSRs using this interface is installed
  5497. Note:    this function is provided to that the multiplex number will appear used
  5498.       to other programs
  5499. SeeAlso: AH=39h/BL=00h
  5500. ----------2F39--BL00-------------------------
  5501. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5502.     AH = 39h
  5503.     BL = 00h
  5504.     AL = TSR ID number (01h-FFh, currently only 01h-0Ch used)
  5505. Return: AL = status
  5506.         00h not installed
  5507.         FFh installed
  5508.         DX = segment address of resident module
  5509. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5510.       resident module is installed by allocating a block of upper memory,
  5511.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  5512.       field with the TSR's name.
  5513. SeeAlso: AX=3900h,AH=39h/BL=01h
  5514.  
  5515. Format of TSR modules:
  5516. Offset    Size    Description
  5517.  00h  4 BYTEs    signature "FTSR"
  5518.  04h    WORD    segment address of this module
  5519.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5520.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5521.         (usually only a PSP if file access is required)
  5522.      5N BYTEs    interrupt list (see below)
  5523.     BYTE    FFh terminator
  5524.  
  5525. Format of interrupt list entry:
  5526. Offset    Size    Description
  5527.  00h    BYTE    interrupt number (00h-FEh)
  5528.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5529.  03h    WORD    offset within segment of begin of interrupt handler code
  5530. ----------2F39--BL01-------------------------
  5531. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5532.     AH = 39h
  5533.     BL = 01h
  5534.     AL = TSR ID number (01h-FFh)
  5535. Return: AL = status
  5536.         00h not ready to be removed
  5537.         FFh resident module may be removed by deassigning the interrupts
  5538.         hooked by the TSR and deallocating the TSR's memory block
  5539.     AH,BX,CX,DX,ES destroyed
  5540. SeeAlso: AX=3900h,AH=39h/BL=00h
  5541. ----------2F39-------------------------------
  5542. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5543.     AH = 39h
  5544.     BL = function number (02h-FFh)
  5545.     AL = TSR ID number (01h-FFh)
  5546.     CX,DX,SI,DI,DS,ES may contain parameters
  5547. Return: as appropriate for the called function
  5548. SeeAlso: AX=3900h
  5549. ----------2F4000-----------------------------
  5550. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5551.     AX = 4000h
  5552. Return: AL = 01h does not virtualize video access
  5553.          02h virtualizes the video when in text mode
  5554.          03h virtualizes the video when in text mode or single plane
  5555.          graphics modes
  5556.          04h virtualizes the video when in text mode, single plane
  5557.          graphics modes, and VGA multiplane modes
  5558.          FFh virtualizes the video fully
  5559. Note:    this function is used by display drivers to find out what capabilities
  5560.       exist for the VDD driver and also trigger then VDD driver to call
  5561.       functions 4005h and 4006h.  This function also gives the Video Driver
  5562.       hardware access to the video registers.
  5563. ----------2F4001-----------------------------
  5564. INT 2F - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5565.     AX = 4001h
  5566. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5567.       and the video driver should save any necessary state
  5568. SeeAlso: AX=4002h,AX=4005h
  5569. ----------2F4002-----------------------------
  5570. INT 2F - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5571.     AX = 4002h
  5572. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5573.       and the video driver should restore the previously-saved state
  5574. SeeAlso: AX=4001h,AX=4006h
  5575. ----------2F4003-----------------------------
  5576. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5577.     AX = 4003h
  5578. Note:    This critical section must be exited within 1 second.
  5579. SeeAlso: AX=4004h
  5580. ----------2F4004-----------------------------
  5581. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5582.     AX = 4004h
  5583. SeeAlso: AX=4003h
  5584. ----------2F4005-----------------------------
  5585. INT 2F - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5586.     AX = 4005h
  5587. Note:    called by Windows when the DOS box is about to be placed in the
  5588.       background and the video driver should save any necessary state
  5589.       information
  5590. SeeAlso: AX=4001h,AX=4006h
  5591. ----------2F4006-----------------------------
  5592. INT 2F - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5593.     AX = 4006h
  5594. Note:    called by Windows when the DOS box is about to be placed in the
  5595.       foreground and the video driver should restore any necessary state
  5596.       information
  5597. SeeAlso: AX=4002h,AX=4005h
  5598. ----------2F4007-----------------------------
  5599. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5600.     AX = 4007h
  5601. ----------2F41-------------------------------
  5602. INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE
  5603.     AH = 41h
  5604.     ???
  5605. Return: ???
  5606. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5607.       file/printer services
  5608. SeeAlso: AX=118Ah,AH=42h,AH=4Bh
  5609. ----------2F42-------------------------------
  5610. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5611.     AH = 42h
  5612.     ???
  5613. Return: ???
  5614. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5615.       file/printer services
  5616. SeeAlso: AX=118Ah,AH=41h,AH=4Bh
  5617. ----------2F4300-----------------------------
  5618. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - INSTALLATION CHECK
  5619.     AX = 4300h
  5620. Return: AL = 80h XMS driver installed
  5621.     AL <> 80h no driver
  5622. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5623.       above 640K
  5624.     this installation check DOES NOT follow the format used by other
  5625.       software
  5626. SeeAlso: AX=4310h
  5627. ----------2F4310-----------------------------
  5628. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) - GET DRIVER ADDRESS
  5629.     AX = 4310h
  5630. Return: ES:BX -> driver entry point
  5631. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5632. SeeAlso: AX=4300h
  5633.  
  5634. Perform a FAR call to the driver entry point with AH set to the function code
  5635.     AH    function
  5636.     00h  Get XMS version number
  5637.          Return: AX = XMS version (in BCD)
  5638.              BX = internal revision number
  5639.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5640.               0000h if HMA does not exist
  5641.     01h  Request High Memory Area (1M to 1M + 64K)
  5642.          DX = memory in bytes (for TSR or device drivers)
  5643.           FFFFh if application program
  5644.          Return: AX = 0001h success
  5645.             = 0000h failure
  5646.                BL = error code (see below)
  5647.     02h  Release High Memory Area
  5648.          Return: AX = 0001h success
  5649.             = 0000h failure
  5650.                BL = error code (see below)
  5651.     03h  Global enable A20, for using the HMA
  5652.          Return: AX = 0001h success
  5653.             = 0000h failure
  5654.                BL = error code (see below)
  5655.     04h  Global disable A20
  5656.          Return: AX = 0001h success
  5657.             = 0000h failure
  5658.                BL = error code (see below)
  5659.     05h  Local enable A20, for direct access to extended memory
  5660.          Return: AX = 0001h success
  5661.             = 0000h failure
  5662.                BL = error code (see below)
  5663.     06h  Local disable A20
  5664.          Return: AX = 0001h success
  5665.             = 0000h failure
  5666.                BL = error code (see below)
  5667.     07h  Query A20 state
  5668.          Return: AX = 0001h enabled
  5669.             = 0000h disabled
  5670.              BL = error code (0 = successful)
  5671.     08h  Query free extended memory, not counting HMA
  5672.          BL = 00h (some implementations leave BL unchanged on success)
  5673.          Return: AX = size of largest extended memory block in K
  5674.              DX = total extended memory in K
  5675.              BL = error code (see below)
  5676.     09h  Allocate extended memory block
  5677.          DX = Kbytes needed
  5678.          Return: AX = 0001h success
  5679.                DX = handle for memory block
  5680.             = 0000h failure
  5681.                BL = error code (see below)
  5682.     0Ah  Free extended memory block
  5683.          DX = handle of block to free
  5684.          Return: AX = 0001h success
  5685.             = 0000h failure
  5686.                BL = error code (see below)
  5687.     0Bh  Move extended memory block
  5688.          DS:SI -> EMM structure (see below)
  5689.          Note: if either handle is 0000h, the corresponding offset is
  5690.            considered to be an absolute segment:offset address in
  5691.            directly addressable memory
  5692.          Return: AX = 0001h success
  5693.             = 0000h failure
  5694.                BL = error code (see below)
  5695.     0Ch  Lock extended memory block
  5696.          DX = handle of block to lock
  5697.          Return: AX = 0001h success
  5698.                DX:BX = 32-bit linear address of locked block
  5699.             = 0000h failure
  5700.                BL = error code (see below)
  5701.     0Dh  Unlock extended memory block
  5702.          DX = handle of block to unlock
  5703.          Return: AX = 0001h success
  5704.             = 0000h failure
  5705.                BL = error code (see below)
  5706.     0Eh  Get handle information
  5707.          DX = handle for which to get info
  5708.          Return: AX = 0001h success
  5709.                BH = block's lock count
  5710.                BL = number of free handles left
  5711.                DX = block size in K
  5712.             = 0000h failure
  5713.                BL = error code (see below)
  5714.     0Fh  Reallocate extended memory block
  5715.          DX = handle of block
  5716.          BX = new size of block in K
  5717.          Return: AX = 0001h success
  5718.             = 0000h failure
  5719.                BL = error code (see below)
  5720.     10h  Request upper memory block (nonEMS memory above 640K)
  5721.          DX = size of block in paragraphs
  5722.          Return: AX = 0001h success
  5723.                BX = segment address of UMB
  5724.                DX = actual size of block
  5725.             = 0000h failure
  5726.                BL = error code (see below)
  5727.                DX = largest available block
  5728.     11h  Release upper memory block
  5729.          DX = segment address of UMB to release
  5730.          Return: AX = 0001h success
  5731.             = 0000h failure
  5732.                BL = error code (see below)
  5733.     12h  Reallocate upper memory block (XMS v3.0)
  5734.          DX = segment address of UMB to resize
  5735.          BX = new size of block in paragraphs
  5736.          Return: AX = 0001h success
  5737.             = 0000h failure
  5738.                BL = error code (see below)
  5739.     34h  (QEMM 5.11 only, undocumented) ???
  5740.     44h  (QEMM 5.11 only, undocumented) ???
  5741.     88h  (QEMM 6.0, undocumented) query free extended memory
  5742.          Return: EAX = largest block of extended memory, in K
  5743.                   ECX = ??? (00FFFFFFh)
  5744.              EDX = total Kbytes of extended memory
  5745.              BL = status
  5746.                  00h success
  5747.              A0h failure
  5748.     89h  (QEMM 6.0, undocumented) allocate extended memory
  5749.          EDX = Kbytes needed
  5750.          Return: AX = 0001h success
  5751.                      EDX = handle for allocated block (free with AH=0Ah)
  5752.             = 0000h failure
  5753.                 BL = status (80h,A0h,A1h,A2h)
  5754.     8Eh  (QEMM 6.0, undocumented) get handle information
  5755.          DX = handle
  5756.          Return: AX = 0001h success
  5757.                      BH = block's lock count???
  5758.                 CX = number of free handles left
  5759.                 EDX = block size in K
  5760.                  = 0000h failure
  5761.                      BL = status (A2h)
  5762.     8Fh  (QEMM 6.0, undocumented) reallocate extended memory block
  5763.          DX = handle
  5764.          EBX = new size in K
  5765.          Return: AX = 0001h success
  5766.                  = 0000h failure
  5767.                 BL = status (A2h,ABh) (see below)
  5768.  
  5769. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  5770.  
  5771. Format of EMM structure:
  5772. Offset    Size    Description
  5773.  00h    DWORD    number of bytes to move (must be even)
  5774.  04h    WORD    source handle
  5775.  06h    DWORD    offset into source block
  5776.  0Ah    WORD    destination handle
  5777.  0Ch    DWORD    offset into destination block
  5778.  
  5779. Error codes returned in BL:
  5780.     00h successful
  5781.     80h function not implemented
  5782.     81h Vdisk was detected
  5783.     82h an A20 error occurred
  5784.     8Eh a general driver error
  5785.     8Fh unrecoverable driver error
  5786.     90h HMA does not exist
  5787.     91h HMA is already in use
  5788.     92h DX is less than the /HMAMIN= parameter
  5789.     93h HMA is not allocated
  5790.     94h A20 line still enabled
  5791.     A0h all extended memory is allocated
  5792.     A1h all available extended memory handles are allocated
  5793.     A2h invalid handle
  5794.     A3h source handle is invalid
  5795.     A4h source offset is invalid
  5796.     A5h destination handle is invalid
  5797.     A6h destination offset is invalid
  5798.     A7h length is invalid
  5799.     A8h move has an invalid overlap
  5800.     A9h parity error occurred
  5801.     AAh block is not locked
  5802.     ABh block is locked
  5803.     ACh block lock count overflowed
  5804.     ADh lock failed
  5805.     B0h only a smaller UMB is available
  5806.     B1h no UMB's are available
  5807.     B2h UMB segment number is invalid
  5808. ----------2F4601-----------------------------
  5809. INT 2F - Multiplex - DOS 5.0 kernel - ???
  5810.     AX = 4601h
  5811. Return: ???
  5812. Note:    copies the MCB following the caller's PSP memory block into DOS data
  5813.       segment
  5814. SeeAlso: AX=4602h
  5815. ----------2F4602-----------------------------
  5816. INT 2F - Multiplex - DOS 5.0 kernel - ???
  5817.     AX = 4602h
  5818. Return: ???
  5819. Note:    copies previously copied MCB from DOS data segment into MCB following
  5820.       caller's PSP memory block
  5821. SeeAlso: AX=4601h
  5822. ----------2F4653CX0002-----------------------
  5823. INT 2F - F-PROT v1.x only - F-LOCK.EXE 
  5824.     AX = 4653h
  5825.     CX = 0002h
  5826.     BX = subfunction
  5827.         0000h  installation check
  5828.         Return: AX = FFFFh
  5829.         0001h  uninstall
  5830.         Return: AX,BX,ES destroyed
  5831.         0002h  disable (v1.08 and below only)
  5832.         0003h  enable (v1.08 and below only)
  5833. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  5834.       Skulason
  5835. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  5836. ----------2F4653CX0003-----------------------
  5837. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  5838.     AX = 4653h
  5839.     CX = 0003h
  5840.     BX = subfunction
  5841.         0000h  installation check
  5842.         Return: AX = FFFFh
  5843.         0001h  uninstall
  5844.         Return: AX,BX,ES destroyed
  5845. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  5846.       Skulason
  5847. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  5848. ----------2F4653CX0004-----------------------
  5849. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  5850.     AX = 4653h
  5851.     CX = 0004h
  5852.     BX = subfunction
  5853.         0000h  installation check
  5854.         Return: AX = FFFFh
  5855.         0001h  uninstall
  5856.         Return: AX,BX,ES destroyed
  5857.         0002h  disable (v1.08 and below only)
  5858.            display message (v1.14+)
  5859.             other registers: ???
  5860.         0003h  enable (v1.08 and below only)
  5861.            display message (v1.14+)
  5862.             other registers: ???
  5863.             Return: AX = key pressed by user
  5864. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  5865.       Fridrik Skulason
  5866. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  5867. ----------2F4653CX0005-----------------------
  5868. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  5869.     AX = 4653h
  5870.     CX = 0005h
  5871.     BX = subfunction
  5872.         0000h installation check
  5873.         Return: AX = FFFFh
  5874.         0001h uninstall
  5875.         Return: AX,BX,ES destroyed
  5876. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  5877.       Fridrik Skulason
  5878. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  5879. ----------2F4680-----------------------------
  5880. INT 2F - MS Windows v3.0 - INSTALLATION CHECK
  5881.     AX = 4680h
  5882. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  5883.            or DOS 5 DOSSHELL active
  5884.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  5885.             mode
  5886. Note:    not officially documented, but Microsoft has indicated that they
  5887.       intend to provide an installation check which works in all modes
  5888. SeeAlso: AX=1600h
  5889. ----------2F4800-----------------------------
  5890. INT 2F - DOS v5.0 DOSKEY - INSTALLATION CHECK
  5891.     AX = 4800h
  5892. Return: AL = nonzero if installed
  5893. SeeAlso: AX=4810h
  5894. ----------2F4810-----------------------------
  5895. INT 2F - DOS v5.0 DOSKEY - READ INPUT LINE FROM CONSOLE
  5896.     AX = 4810h
  5897.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  5898. Return: AX = 0000h if successful
  5899. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  5900.       the previous handler
  5901.     if the user's input is a macro name, no text is placed in the buffer
  5902.       even though AX=0000h on return; the program must immediately issue
  5903.       this call again to retrieve the expansion of the macro.  Similarly,
  5904.       if the user enters a special parameter such as $*, this call must
  5905.       be repeated to retrieve the expansion; on the second call, DOSKEY
  5906.       overwrites the macro name on the screen with its expansion.
  5907. SeeAlso: AX=4800h,INT 21/AH=0Ah
  5908. ----------2F4A01-----------------------------
  5909. INT 2F - DOS v5.0 - QUERY FREE HMA SPACE
  5910.     AX = 4A01h
  5911. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  5912.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  5913. SeeAlso: AX=4310h,AX=4A02h
  5914. ----------2F4A02-----------------------------
  5915. INT 2F - DOS v5.0 - ALLOCATE HMA SPACE
  5916.     AX = 4A02h
  5917.     BX = number of bytes
  5918. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  5919.     BX destroyed
  5920. Note:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  5921. SeeAlso: AX=4A01h
  5922. ----------2F4A05-----------------------------
  5923. INT 2F - DOS v5.0 DOSSHELL - ???
  5924.     AX = 4A05h
  5925.     SI = function
  5926.         0000h reset???
  5927.         0001h ???
  5928.         0002h ???
  5929.         0003h ???
  5930.         0004h ???
  5931.         BL = ???
  5932.         0005h ???
  5933.         0006h get ???
  5934.         Return: ES:DI -> ???
  5935.         0007h get ???
  5936.         Return: AX = ???
  5937.         0008h get ???
  5938.         Return: DX:AX -> ???
  5939.         0009h get ???
  5940.         Return: ES = ???
  5941.         000Ah ???
  5942.         BL = ???
  5943.         ES:DI -> ???
  5944.         000Bh get ???
  5945.         Return: AX = ???
  5946.         000Ch ???
  5947.         BL = ???
  5948.         Return: DX:AX -> ???
  5949. Note:    DOSSHELL chains to the previous handler if SI is not one of the values
  5950.       listed above
  5951. SeeAlso: AX=4B01h
  5952. ----------2F4B-------------------------------
  5953. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  5954.     AH = 4Bh
  5955.     ???
  5956. Return: ???
  5957. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5958.       file/printer services
  5959. SeeAlso: AX=118Ah,AH=41h,AH=42h
  5960. ----------2F4B01-----------------------------
  5961. INT 2F - DOS v5.0 TASK SWITCHER - BUILD CALLOUT CHAIN
  5962.     AX = 4B01h
  5963.     CX:DX -> task switcher entry point (see AX=4B02h)
  5964.     ES:BX = 0000h:0000h
  5965. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  5966. Notes:    called by the task switcher
  5967.     this function is hooked by clients which require notification of task
  5968.       switcher activities; the call must first be passed on to the prior
  5969.       handler with registers unchanged using a simulated interrupt.     On
  5970.       return, the client must build a callback info structure and store
  5971.       the returned ES:BX in the "next" field, then return the address of
  5972.       its own callback info structure.
  5973.     a client program must add itself to the notification chain if it
  5974.       provides services to other programs; before terminating, it must
  5975.       remove itself from the chain by calling the task switcher's entry
  5976.       point with AX=0005h (see AX=4B02h)
  5977.     the task switcher entry point should not be saved, as it is subject to
  5978.       change and will be provided on any notification call
  5979. SeeAlso: AX=4B02h
  5980.  
  5981. Format of callback info structure:
  5982. Offset    Size    Description
  5983.  00h    DWORD    pointer to next callback info structure
  5984.  04h    DWORD    pointer to notification function (see below)
  5985.  08h    DWORD    reserved
  5986.  0Ch    DWORD    address of zero-terminated list of API info structures
  5987.         (see AX=4B02h)
  5988.  
  5989. Notification function is called with:
  5990.     AX = function
  5991.         0000h switcher initialization
  5992.         Return: AX = 0000h if OK to load
  5993.                = nonzero to abort task switcher
  5994.         0001h query suspend
  5995.         BX = session ID
  5996.         Return: AX = 0000h if OK to switch session
  5997.                = 0001h if not
  5998.         0002h suspend session
  5999.         BX = session ID
  6000.         interrupts disabled
  6001.         Return: AX = 0000h if OK to switch session
  6002.                = 0001h if not
  6003.         0003h activate session
  6004.         BX = session ID
  6005.         CX = session status flags
  6006.             bit 0: set if first activation of session
  6007.             bits 1-15: reserved (0)
  6008.         interrupts disabled
  6009.         Return: AX = 0000h
  6010.         0004h session active
  6011.         BX = session ID
  6012.         CX = session status flags
  6013.             bit 0: set if first activation of session
  6014.             bits 1-15: reserved (0)
  6015.         Return: AX = 0000h
  6016.         0005h create session
  6017.         BX = session ID
  6018.         Return: AX = 0000h if OK to create session
  6019.                = 0001h if not
  6020.         0006h destroy session
  6021.         BX = session ID
  6022.         Return: AX = 0000h
  6023.         0007h switcher termination
  6024.         BX = flags
  6025.             bit 0: set if calling switcher is only switcher loaded
  6026.             bits 1-15: reserved (0)
  6027.         Return: AX = 0000h
  6028.     ES:DI -> task switcher entry point (see AX=4B02h)
  6029. Notes:    function 0000h is generally called by the program which controls or
  6030.       invokes the task switcher, rather than by the task switcher itself;
  6031.       the entry point supplied to this function is not necessarily the
  6032.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6033.       any client indicates that loading is not possible, all clients will
  6034.       be called with function 0007h; thus it is possible for a client to
  6035.       receive a termination notice without a corresponding initialization
  6036.       notice.
  6037.     except for functions 0002h and 0003h, the notification handler is
  6038.       called with interrupts enabled and may make any INT 21h function
  6039.       call; interrupts must not be enabled in functions 0002h and 0003h
  6040.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6041.       point is no longer valid
  6042. ----------2F4B02BX0000-----------------------
  6043. INT 2F - DOS v5.0 TASK SWITCHER - INSTALLATION CHECK
  6044.     AX = 4B02h
  6045.     BX = 0000h
  6046.     ES:DI = 0000h:0000h
  6047. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6048.     ES:DI -> task switcher entry point (see below) if loaded
  6049.         AX = 0000h
  6050. Note:    the returned entry point is that for the most-recently loaded task
  6051.       switcher; the entry points for prior task switchers may be determined
  6052.       with the "get version" call (see below)
  6053. SeeAlso: AX=4A05h,AX=4B03h
  6054.  
  6055. Call task switcher entry point with:
  6056.     AX = 0000h get version
  6057.         Return: CF clear if successful
  6058.                 AX = 0000h
  6059.                 ES:BX -> task switcher version struct (see below)
  6060.             CF set if unsupported function
  6061.     AX = 0001h test memory region
  6062.         ES:DI -> first byte to be tested
  6063.         CX = size of region to test
  6064.         Return: CF clear if successful
  6065.                 AX = memory type of tested region
  6066.                 0000h global
  6067.                 0001h global and local
  6068.                 0002h local (replaced on session switch)
  6069.             CF set if unsupported function
  6070.     AX = 0002h suspend switcher
  6071.         ES:DI -> new task switcher's entry point
  6072.         Return: CF clear if successful
  6073.                 AX = state
  6074.                 0000h switcher has been suspended
  6075.                 0001h switcher not suspended, new switcher must
  6076.                     abort
  6077.                 0002h switcher not suspended, but new switcher
  6078.                     may run anyway
  6079.             CF set if unsupported function
  6080.     AX = 0003h resume switcher
  6081.         ES:DI -> new task switcher's entry point
  6082.         Return: CF clear if successful
  6083.                 AX = 0000h
  6084.             CF set if unsupported function
  6085.     AX = 0004h hook notification chain
  6086.         ES:DI -> callback info structure to be added to chain
  6087.             (see AX=4B01h)
  6088.         Return: CF clear if successful
  6089.                 AX = 0000h
  6090.             CF set if unsupported function
  6091.     AX = 0005h unhook notification chain
  6092.         ES:DI -> callback info structure to be removed from chain
  6093.             (see AX=4B01h)
  6094.         Return: CF clear if successful
  6095.                 AX = 0000h
  6096.             CF set if unsupported function
  6097.     AX = 0006h query API support
  6098.         BX = asynchronous API identifier
  6099.         Return: CF clear if successful
  6100.                 AX = 0000h
  6101.                 ES:BX -> API info structure (see below) for the
  6102.                     client which provides the highest
  6103.                     level of 
  6104.             CF set if unsupported function
  6105.  
  6106. Format of task switcher version structure:
  6107. Offset    Size    Description
  6108.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6109.  02h    WORD    minor version of supported protocol
  6110.  04h    WORD    major version of task switcher
  6111.  06h    WORD    minor version of task switcher
  6112.  08h    WORD    task switcher ID (see AX=4B03h)
  6113.  0Ah    WORD    operation flags
  6114.         bit 0: set if task switcher disabled
  6115.         bits 1-15: reserved (0)
  6116.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6117.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6118.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6119.  
  6120. Format of API info structure:
  6121. Offset    Size    Description
  6122.  00h    WORD    size of structure in bytes (000Ah)
  6123.  02h    WORD    API identifier
  6124.         0001h NetBIOS
  6125.         0002h 802.2
  6126.         0003h TCP/IP
  6127.         0004h LAN Manager named pipes
  6128.         0005h Novell NetWare IPX
  6129.  04h    WORD    major version \ of highest version of API for which the support
  6130.  06h    WORD    minor version / level specified in the next field is provided
  6131.  08h    WORD    support level
  6132.         0001h minimal support
  6133.         0002h API-level support
  6134.         0003h switcher compatibility
  6135.         0004h seamless compatibility
  6136. ----------2F4B03-----------------------------
  6137. INT 2F - DOS v5.0 TASK SWITCHER - ALLOCATE SWITCHER ID
  6138.     AX = 4B03h
  6139.     ES:DI -> task switcher entry point (see AX=4B02h)
  6140. Return: AX = 0000h
  6141.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6142. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6143.       must allocate an identifier for itself and provide this function to
  6144.       all subsequent task switchers; if it is not the first to be loaded,
  6145.       it must call this function to allocate an ID.     The switcher ID is
  6146.       used as the high four bits of all session identifiers to ensure
  6147.       unique session IDs.
  6148.     if no more switcher IDs are available, the new task switcher making the
  6149.       call must terminate or disable itself
  6150.     the task switcher providing the identifiers may call the new task
  6151.       switcher's entry point as needed
  6152.     this call is available from within DOSSHELL even if the task switcher
  6153.       is not installed
  6154. SeeAlso: AX=4B02h,AX=4B04h
  6155. ----------2F4B04-----------------------------
  6156. INT 2F - DOS v5.0 TASK SWITCHER - FREE SWITCHER ID
  6157.     AX = 4B04h
  6158.     BX = switcher ID
  6159.     ES:DI -> task switcher entry point (see AX=4B02h)
  6160. Return: AX = 0000h
  6161.     BX = status
  6162.         0000h successful
  6163.         other error (invalid ID or ID not allocated)
  6164. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6165.       and is providing the support for AX=4B03h and AX=4B04h
  6166.     the task switcher providing the identifiers may call the terminating
  6167.       task switcher's entry point as needed
  6168.     this call is available from within DOSSHELL even if the task switcher
  6169.       is not installed
  6170. SeeAlso: AX=4B02h,AX=4B03h
  6171. ----------2F4B05-----------------------------
  6172. INT 2F - DOS v5.0 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA
  6173.     AX = 4B05h
  6174.     ES:BX = 0000h:0000h
  6175.     CX:DX -> task switcher entry point (see AX=4B02h)
  6176. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6177. Notes:    called by task switcher
  6178.     clients with instance data should hook this call, pass it through to
  6179.       the previous handler with unchanged registers using a simulated
  6180.       interrupt.  On return, the client should create a startup info
  6181.       structure (see below), store the returned ES:BX in the "next"
  6182.       field, and return the address of the created structure in ES:BX
  6183.     all MSDOS function calls are available from within this call
  6184. SeeAlso: AX=1605h,AX=4B02h
  6185.  
  6186. Format of startup info structure:
  6187. Offset    Size    Description
  6188.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6189.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6190.  06h    DWORD    0000h:0000h (ignored)
  6191.  0Ah    DWORD    ignored
  6192.  0Eh    DWORD    pointer to instance data records
  6193.  
  6194. Format of one instance data record in array:
  6195. Offset    Size    Description
  6196.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6197.  04h    WORD    size of instance data
  6198. ----------2F5453-----------------------------
  6199. INT 2F - Multiplex - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  6200.     AX = 5453h
  6201.     BX = subfunction
  6202.         00h installation check
  6203.         CX = 0000h
  6204.         DS:SI -> 8-char blank-padded name
  6205.         Return: AX = FFFFh installed
  6206.                 CX = ID number of already-installed copy
  6207.                = anything else, not installed
  6208.                 CX = ID number for TSR when installed
  6209.         01h get user parameters
  6210.         CX = TSR ID number
  6211.         Return: AX = 0000h successful
  6212.                ES:BX -> user parameter block (see below)
  6213.                = nonzero failed
  6214.         02h check if hotkey in use
  6215.         CL = scan code of hot key
  6216.         Return: AX = FFFFh hot key conflicts with another TSR
  6217.                  otherwise safe to use the hotkey
  6218.         03h replace default critical error handler
  6219.         CX = TSR ID number
  6220.         DS:SI -> new routine for INT 24h
  6221.         Return: AX = nonzero, unable to install new handler
  6222.         04h get internal data area
  6223.         CX = TSR ID number
  6224.         Return: AX = 0000h
  6225.                 ES:BX -> TSR's internal data area (see below)
  6226.                = nonzero, TSR not found
  6227.         05h set multiple hot keys
  6228.         CX = TSR ID number
  6229.         DL = number of additional hot keys to allocate
  6230.         DS:SI -> table of hot keys
  6231.             BYTE  hotkey scan code
  6232.             BYTE  hotkey shift state
  6233.             BYTE  flag value to pass to TSR (nonzero)
  6234.         Return: AX = nonzero, unable to install hot keys
  6235.         06h - 0Fh reserved
  6236.         10h enable TSR
  6237.         CX = TSR ID number
  6238.         Return: AX = nonzero, unable to enable
  6239.         11h disable TSR
  6240.         CX = TSR ID number
  6241.         Return: AX = nonzero, unable to disable
  6242.         12h unload TSR
  6243.         CX = TSR ID number
  6244.         Return: AX = nonzero, invalid TSR number
  6245.         Note: if any interrupts used by TSR have been grabbed by
  6246.             another TSR, the TesSeRact routines will wait until
  6247.             it is safe to remove the indicated TSR from memory
  6248.         13h restart TSR
  6249.         CX = TSR ID number of TSR which was unloaded but is still in
  6250.              memory
  6251.         Return: AX = nonzero, unable to restart TSR
  6252.         14h get status word
  6253.         CX = TSR ID number
  6254.         Return: AX = FFFFh invalid ID number
  6255.                = other, successful
  6256.                 BX = bit flags
  6257.         15h set status word
  6258.         CX = TSR ID number
  6259.         DX = new bit flags
  6260.         Return: AX = nonzero, unable to set status word
  6261.         16h get INDOS state at popup
  6262.         CX = TSR ID number
  6263.         Return: AX = 0000h successful
  6264.                 BX = value of INDOS flag
  6265.         17h - 1Fh reserved
  6266.         20h call user procedure
  6267.         CX = TSR ID number
  6268.         ES:DI -> user-defined data
  6269.         Return: AX = 0000h successful
  6270.         21h stuff keystrokes into keyboard buffer
  6271.         CX = TSR ID number
  6272.         DL = speed
  6273.             00h stuff keystrokes only when buffer is empty
  6274.             01h stuff up to four keystrokes per clock tick
  6275.             02h stuff up to 15 keystrokes per clock tick
  6276.         DH = scan code flag
  6277.             if zero, buffer contains alternating ASCII and scan codes
  6278.             if nonzero, buffer contains only ASCII codes
  6279.         SI = number of keystrokes
  6280.         ES:DI -> buffer to stuff
  6281.         Return: AX = 0000h success
  6282.                  F0F0h user aborted with ^C or ^Break
  6283.                  other unable to stuff keystrokes
  6284.         22h (v1.10) trigger popup
  6285.         CX = TSR ID number
  6286.         Return: AX = 0000h success, TSR will either pop up or beep to
  6287.                    indicate that it is unable to pop up
  6288.                  nonzero invalid ID number
  6289.         23h (v1.10) invoke TSR's background function
  6290.         CX = TSR ID number
  6291.         Return: AX = 0000h success
  6292.                  FFFFh not safe to call background function
  6293.                  nonzero invalid ID number
  6294.         24h - 2Fh reserved
  6295. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  6296.       fully supports the TesSeRact API, as do the SWAP?? programs by 
  6297.       Innovative Data Concepts.
  6298.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  6299.       of the user parameter block) using the name "AVATAR  "
  6300.  
  6301. Format of User Parameter Block:
  6302. Offset    Size    Description
  6303.  00h  8 BYTEs    blank-padded TSR name
  6304.  08h    WORD    TSR ID number
  6305.  0Ah    DWORD    bitmap of supported functions
  6306.  0Eh    BYTE    scan code of primary hotkey
  6307.             00h = pop up when shift states match
  6308.             FFh = no popup (if shift state also FFh)
  6309.  0Fh    BYTE    shift state of primary hotkey
  6310.             FFh = no popup (if scan code also FFh)
  6311.  10h    BYTE    number of secondary hotkeys
  6312.  11h    DWORD    pointer to extra hotkeys set by func 05h
  6313.  15h    WORD    current TSR status flags
  6314.  17h    WORD    PSP segment of TSR
  6315.  19h    DWORD    DTA for TSR
  6316.  1Dh    WORD    default DS for TSR
  6317.  1Fh    DWORD    stack at popup
  6318.  23h    DWORD    stack at background invocation
  6319.  
  6320. Format of TSR internal data area:
  6321. Offset    Size    Description
  6322.  00h    BYTE    revision level of TesSeRact library
  6323.  01h    BYTE    type of popup in effect
  6324.  02h    BYTE    INT 08 occurred since last invocation
  6325.  03h    BYTE    INT 13 occurred since last invocation
  6326.  04h    BYTE    active interrupts
  6327.  05h    BYTE    active soft interrupts
  6328.  06h    BYTE    DOS major version
  6329.  07h    BYTE    how long to wait before popping up
  6330.  08h    DWORD    pointer to INDOS flag
  6331.  0CH    DWORD    pointer to DOS critical error flag
  6332.  10h    WORD    PSP segment of interrupted program
  6333.  12h    WORD    PSP segment of prog interrupted by INT 28
  6334.  14h    DWORD    DTA of interrupted program
  6335.  18h    DWORD    DTA of program interrupted by INT 28
  6336.  1Ch    WORD    SS of interrupted program
  6337.  1Eh    WORD    SP of interrupted program
  6338.  20h    WORD    SS of program interrupted by INT 28
  6339.  22h    WORD    SP of program interrupted by INT 28
  6340.  24h    DWORD    INT 24 of interrupted program
  6341.  28h  3 WORDs    DOS 3+ extended error info
  6342.  2Eh    BYTE    old BREAK setting
  6343.  2Fh    BYTE    old VERIFY setting
  6344.  30h    BYTE    were running MS WORD 4.0 before popup
  6345.  31h    BYTE    MS WORD 4.0 special popup flag
  6346.  32h    BYTE    enhanced keyboard call in use
  6347.  33h    BYTE    delay for MS WORD 4.0
  6348. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  6349.     DWORD    old interrupt vector
  6350.     BYTE    interrupt number
  6351.     WORD    offset in TesSeRact code segment of new interrupt handler
  6352. ----------2F5500-----------------------------
  6353. INT 2F - DOS v5.0 - COMMAND.COM INTERFACE
  6354.     AX = 5500h
  6355. Return: AX = 0000h
  6356.     DS:SI -> entry point table
  6357. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  6358.       been moved into the HMA; only the primary COMMAND.COM retains this
  6359.       portion
  6360.     procedures called from a dispatcher in COMMAND's resident portion;
  6361.       most assume that the segment address of the resident portion is on
  6362.       the stack and are thus not of general use
  6363. ----------2F6282-----------------------------
  6364. INT 2F - PC Tools v7.0+ VDEFEND, DATAMON - SET ??? ADDRESS
  6365.     AX = 6282h
  6366.     CX:DX -> ??? or 0000h:0000h
  6367.     DI = 0000h ???
  6368.          FFFFh ???
  6369.          other segment of ???
  6370. Return: BX = 0062h
  6371. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  6372.       (DATAMON only)
  6373. SeeAlso: INT 21/AH=FAh"VDEFEND"
  6374. ----------2F6284BX0000-----------------------
  6375. INT 2F - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  6376.     AX = 6284h
  6377.     BX = 0000h
  6378.     CX = 0000h
  6379. Return: AX = segment of resident code
  6380.     BX = 5555h
  6381.     CX = 5555h
  6382. ----------2F6284BX0001-----------------------
  6383. INT 2F - PC Tools v7.0+ DATAMON - GET ???
  6384.     AX = 6284h
  6385.     BX = 0001h
  6386.     CX = 0001h
  6387. Return: AX:BX -> ???
  6388.     CX = BX
  6389. ----------2F6284BX0002-----------------------
  6390. INT 2F - PC Tools v7.0+ DATAMON - GET ???
  6391.     AX = 6284h
  6392.     BX = 0002h
  6393.     CX = 0002h
  6394. Return: AX = ???
  6395.     BX = ???
  6396.     CX = AX
  6397.     DX = BX
  6398. ----------2F6284BX0003-----------------------
  6399. INT 2F - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  6400.     AX = 6284h
  6401.     BX = 0003h
  6402.     CX = flags
  6403.         bit 12: ???
  6404.         10: ???
  6405.          5: ???
  6406.          3: ???
  6407.     DX = flags
  6408.         bit 15: ???
  6409. ----------2F6400-----------------------------
  6410. INT 2F - Multiplex - SCRNSAV2.COM - INSTALLATION CHECK
  6411.     AX = 6400h
  6412. Return: AL = 00h not installed
  6413.          FFh installed
  6414. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  6415. SeeAlso: INT 10/AX=5555h
  6416. ----------2F7A00-----------------------------
  6417. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  6418.     AX = 7A00h
  6419. Return: AL = 00h not installed
  6420.        = FFh installed
  6421.         ES:DI -> FAR entry point for routines accessed exclusively
  6422.             through INT 7A in NetWare versions through 2.0a.  Call
  6423.             with same values as INT 7A
  6424. SeeAlso: AX=7AFFh/BX=0000h,INT 64"Novell",INT 7A"Novell"
  6425. ----------2F7A10-----------------------------
  6426. INT 2F - Novell NetWare - TBMI v2.0 - GET TBMI STATUS
  6427.     AX = 7A10h
  6428. Return: DH = major TBMI version number
  6429.     DL = minor TBMI version number
  6430.     CX = segment address of TBMI resident part
  6431.     BX = status word of TBMI
  6432.         bit 0: INT2F intercepted by TBMI
  6433.         bit 1: INT7A intercepted by TBMI
  6434.         bit 2: INT64 intercepted by TBMI
  6435.         bits 3-14: reserved or unused ???
  6436.         bit 15: outstanding task ID was detected
  6437. Note:    TBMI is the Task-Switched Buffer Manager Interface
  6438. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  6439. ----------2F7A11-----------------------------
  6440. INT 2F - Novell NetWare - TBMI v2.0 - GET INT2F HANDLERS
  6441.     AX = 7A11h
  6442. Return: ES:BX -> old INT 2F handler
  6443.     DS:DX -> TBMI INT 2F handler
  6444. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h
  6445. ----------2F7A12-----------------------------
  6446. INT 2F - Novell NetWare - TBMI v2.0 - GET INT64 HANDLERS
  6447.     AX = 7A12h
  6448. Return: ES:BX -> old INT 64 handler
  6449.     DS:DX -> TBMI INT 64 handler
  6450. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  6451. ----------2F7A13-----------------------------
  6452. INT 2F - Novell NetWare - TBMI v2.0 - GET INT7A HANDLERS
  6453.     AX = 7A13h
  6454. Return: ES:BX = old INT 7A handler
  6455.     DS:DX = TBMI INT 7A handler
  6456. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  6457. ----------2F7A14-----------------------------
  6458. INT 2F - Novell NetWare - TBMI v2.0 - GET STATISTICS
  6459.     AX = 7A14h
  6460.     CX = statistic to retrieve
  6461.         0000h available diagnostic functions???
  6462.         Return: CX = maximum available function??? (000Ch for v2.0)
  6463.         0001h buffers in use
  6464.         Return: CX = TBMI buffers currently in use
  6465.         0002h maximum buffers used
  6466.         Return: CX = maximum number of buffers ever in use
  6467.         0003h unavailable buffers
  6468.         Return: CX = count of unavailable TBMI buffers
  6469.         0004h old interrupt usage
  6470.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  6471.                 INT 64, and INT 7A
  6472.         0005h far call usage
  6473.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  6474.                 including internal accesses)
  6475.         0006h task buffering
  6476.         Return: CX = TBMI task buffering status (enabled/disabled or
  6477.                 disable/enable switch count???)
  6478.         0007h current task ID
  6479.         Return: CX = TBMI current task ID number (0000h if ???)
  6480.         0008h outstanding ID count
  6481.         Return: CX = number of outstanding TBMI IDs
  6482.         0009h configured ECBs
  6483.         Return: CX = number of TBMI Event Control Blocks configured
  6484.         000Ah configured data ECBs
  6485.         Return: CX = number of TBMI data ECBs configured
  6486.         000Bh configured sockets
  6487.         Return: CX = number of TBMI sockets configured (from NETCFG)
  6488.         000Ch current sockets
  6489.         Return: CX = number of TBMI sockets currently in use
  6490. SeeAlso: AX=7A10h
  6491. ----------2F7A1B-----------------------------
  6492. INT 2F - Novell NetWare - TBMI v2.0 - RESERVED???
  6493.     AX = 7A1Bh
  6494. Note:    this call merely performs an IRET
  6495. ----------2F7A80-----------------------------
  6496. INT 2F - Novell NetWare - shell 3.01d - ???
  6497.     AX = 7A80h
  6498. Return: nothing
  6499. Note:    apparently called on abnormal exit of the shell
  6500. ----------2F7A81-----------------------------
  6501. INT 2F - Novell NetWare - shell 3.01d - ???
  6502.     AX = 7A81h
  6503.     CX:DX -> ??? in shell's CS (may be callback address or data structure)
  6504. Return: nothing???
  6505. ----------2F7A85-----------------------------
  6506. INT 2F - Novell NetWare - shell 3.01 - BROADCAST INFORM
  6507.     AX = 7A85h
  6508.     CX = broadcast server number
  6509. Return: CX = 0000h if broadcast message handled by another program
  6510.     CX unchanged if broadcast not handled
  6511. ----------2F7AFE-----------------------------
  6512. INT 2F - Novell NetWare - shell 3.01d - ???
  6513.     AX = 7AFEh
  6514. Return: AL = FFh ???
  6515.          other ???
  6516. ----------2F7AFFBX0000-----------------------
  6517. INT 2F - Novell NetWare - TBMI v2.0 - INSTALLATION CHECK???
  6518.     AX = 7AFFh
  6519.     BX = 0000h
  6520.     CX = 4E65h ("Ne")
  6521.     DX = 7457h ("tW")
  6522.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  6523. Return: AL = FFh if installed
  6524.         CX = configured sockets (14h)
  6525.         DS:SI -> data table ???
  6526.         ES:DI -> IPX far call handler
  6527. Note:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  6528.       of pointers to service events queue head and tail
  6529. SeeAlso: AX=7AFFh/BX=0001h
  6530. ----------2F7AFFBX0001-----------------------
  6531. INT 2F - Novell NetWare - TBMI v2.0, shell v3.01d - INSTALLATION CHECK???
  6532.     AX = 7AFFh
  6533.     BX = 0001h
  6534.     CX = 4E65h ("Ne")
  6535.     DX = 7457h ("tW")
  6536. Return: AL = FFh if installed
  6537.         CX = ???  (8000h)
  6538.         SI = ??? (or -> ???) (0002h)
  6539.         ES:DI -> IPX far call handler
  6540.         ES:DX -> 6-byte data area ???
  6541. SeeAlso: AX=7AFFh/BX=0000h
  6542. ----------2F7F24-----------------------------
  6543. INT 2F - Multiplex - ???
  6544.     AX = 7F24h
  6545.     ???
  6546. Return: ???
  6547. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6548. ----------2F7F26-----------------------------
  6549. INT 2F - Multiplex - ???
  6550.     AX = 7F26h
  6551.     ???
  6552. Return: ???
  6553. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  6554. ---------------------------------------------
  6555.